פיצוץ חד־פעמי
חלק מהיחידה ספרייטים ותמונות במסלול ה-Pygame של Coddy. שיעור 28 מתוך 36.
יש אנימציות שמתנגנות פעם אחת ומסתיימות: פיצוץ מציג את explosion_1.png עד explosion_4.png ואז נעלם. בתור ספרייט, הוא יכול לנהל מונה משלו ולהסיר את עצמו כשנגמרות לו התמונות:
def update(self):
self.timer += 1
if self.timer == 5:
self.timer = 0
self.index += 1
if self.index == len(explosion_frames):
self.kill()
else:
self.image = explosion_frames[self.index]לכל פיצוץ יש timer ו-index משלו, כך שעשרה פיצוצים שהתחילו ברגעים שונים מתנגנים כל אחד מההתחלה. מספיק לשנות את self.image: הקבוצה מציירת את התמונה שהספרייט מחזיק כרגע.
בדקו אם הגענו לסוף לפני קריאת הרשימה: explosion_frames[4] לא קיימת, וברגע שהתמונה האחרונה הוצגה במשך 5 הפריימים שלה, kill() מסיר את הפיצוץ מהקבוצה. לחצו במקום כלשהו בחלון כדי להפעיל פיצוץ.
אתגר
בינוניהוסף ל־Explosion מתודת update: בכל 5 פריימים היא עוברת לתמונה הבאה ב־explosion_frames, ולאחר שהתמונה הרביעית הוצגה במשך 5 פריימים, היא קוראת ל־self.kill().
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Explosions")
clock = pygame.time.Clock()
explosion_frames = []
for n in range(1, 5):
explosion_frames.append(pygame.image.load(f"assets/images/explosion_{n}.png").convert_alpha())
class Explosion(pygame.sprite.Sprite):
def __init__(self, center):
super().__init__()
self.index = 0
self.timer = 0
self.image = explosion_frames[0]
self.rect = self.image.get_rect(center=center)
explosions = pygame.sprite.Group()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
explosions.add(Explosion(event.pos))
explosions.update()
screen.fill((20, 22, 40))
explosions.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה ספרייטים ותמונות
5התנגשויות מדויקות ברמת הפיקסל
מלבנים מרגישים לא הוגניםמסכותספרייטים מדויקים ברמת הפיקסלתיבות פגיעה מעגליות3מחלקות לאובייקטים במשחק
המחלקה הראשונה שלךמתודותself הוא האובייקטרשימה של אובייקטיםאובייקטים עם תמונותתת־מחלקהתרגלו בעצמכם: Pygame אונליין