קפיצה בעת איסוף
חלק מהיחידה צליל ותחושת משחק במסלול ה-Pygame של Coddy. שיעור 18 מתוך 23.
כשאוספים אבן חן, הניקוד עולה באחת, אבל העין שלך נעוצה באבן החן, לא בפינה. קפיצה קצרה מושכת את העין אל המונה: הסמל קופץ וגדל, ואז מתכווץ בחזרה לגודלו.
שומרים מקדם גודל, 1.0 לגודל רגיל. איסוף קובע אותו ל־1.6; בכל פריים הוא חוזר בהדרגה לכיוון 1, באותה שורה כמו קודם:
pop = 1.6 # כשאוספים אבן חן
pop += (1 - pop) * 0.2 # בכל פרייםבזמן הציור, מקדם הגודל קובע את הגודל. יוצרים את ה־Rect בגודל הזה ואז ממקמים את המרכז שלו, כך שהסמל גדל סביב האמצע שלו ולא מהפינה:
size = int(20 * pop)
icon = pygame.Rect(0, 0, size, size)
icon.center = (30, 30)הקפיצה מיידית והחזרה הדרגתית. כך נוצרת תחושה של קפיצה: מקדם של 0.2 מחזיר אותו בתוך כרבע שנייה.
עבור תמונה, משנים את הגודל שלה באמצעות pygame.transform.scale_by(image, pop) וממרכזים את ה־Rect שלה באותו אופן.
אתגר
קללחץ על אבן החן הסגולה כדי לאסוף אותה. גרום לסמל הזהוב לקפוץ:
- הגדר
pop = 1.0לפני הלולאה. - הגדר
pop = 1.6כשאוספים אבן חן. - בכל פריים, החזר אותה בהדרגה:
pop += (1 - pop) * 0.2. - צייר את הסמל ברוחב ובגובה של
int(20 * pop)פיקסלים, כשהוא עדיין ממורכז ב־(30, 30).
נסו בעצמכם
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Gem Picker")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
coin_sound = pygame.mixer.Sound("assets/sounds/coin.ogg")
gem = pygame.Rect(300, 200, 24, 24)
score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN and gem.collidepoint(event.pos):
score += 1
coin_sound.play()
gem.topleft = (random.randint(80, 420), random.randint(90, 300))
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (170, 90, 230), gem)
icon = pygame.Rect(0, 0, 20, 20)
icon.center = (30, 30)
pygame.draw.rect(screen, (255, 200, 60), icon)
label = font.render(f"x {score}", True, (240, 240, 240))
screen.blit(label, (52, 20))
pygame.display.flip()
clock.tick(60)
pygame.quit()
כל השיעורים ביחידה צליל ותחושת משחק
תרגלו בעצמכם: Pygame אונליין