דעיכה והקטנה
חלק מהיחידה צליל ותחושת משחק במסלול ה-Pygame של Coddy. שיעור 10 מתוך 23.
ניצוץ שנשאר ללא שינוי עד שהוא נעלם נראה כמו נקודה שכובתה. ניצוצות אמיתיים מתקררים: הם מתכווצים ומשנים צבע כשהם דועכים. כבר יש לך מספר שמתאר זאת, ה־life של החלקיק. חשב את הגודל והצבע על פיו כשאתה מצייר.
הרדיוס יכול להשתנות ישירות לפי ה־life:
radius = p["life"] // 10 + 1כשנותרו 40 פריימים, הרדיוס הוא 5; כשנותרו 9 או פחות, הוא 1. ה־+ 1 משאיר את הרדיוס על 1 לפחות: מעגל ברדיוס 0 לא מצויר כלל, והניצוץ היה נעלם מוקדם מדי.
כדי לקבוע את הצבע, בחר מתוך כמה שלבים, מחם לקר:
if p["life"] > 25:
color = (255, 220, 80)
elif p["life"] > 10:
color = (255, 140, 40)
else:
color = (180, 50, 40)בדוק קודם את המספר הגדול ביותר. אם תכתוב את התנאים בסדר הפוך, גם life של 30 יקיים את התנאי life > 10, והענף הצהוב לעולם לא ירוץ.
אתגר
בינונימקש הרווח יוצר טבעת של 8 ניצוצות, שכל אחד מהם חי במשך 40 פריימים. גרמו להם להתקרר כשהם עפים:
- ציירו כל ניצוץ ברדיוס
life // 10 + 1. - צבעו אותו בצהוב
(255, 220, 80)כל עוד חייו מעל 25, בכתום(255, 140, 40)כל עוד הם מעל 10, ובאדום כהה(180, 50, 40)לאחר מכן.
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Ring of Sparks")
clock = pygame.time.Clock()
DIRECTIONS = [(3, 0), (2, 2), (0, 3), (-2, 2), (-3, 0), (-2, -2), (0, -3), (2, -2)]
particles = []
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
for vx, vy in DIRECTIONS:
particles.append({"x": 240, "y": 180, "vx": vx, "vy": vy, "life": 40})
for p in particles:
p["x"] += p["vx"]
p["y"] += p["vy"]
p["life"] -= 1
screen.fill((20, 20, 36))
for p in particles:
if p["life"] > 0:
pygame.draw.circle(screen, (255, 220, 80), (p["x"], p["y"]), 4)
pygame.display.flip()
clock.tick(60)
pygame.quit()
כל השיעורים ביחידה צליל ותחושת משחק
תרגלו בעצמכם: Pygame אונליין