انفجار لمرة واحدة
جزء من قسم الكائنات والصور في رحلة 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()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame