أطلق أشعة الليزر
جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 30 من 36.
تُطلق السفينة أشعة الليزر مباشرةً إلى الأعلى. شعاع الليزر هو كائن مرئي يبدأ من مقدمة السفينة، ويتحرك 10 بكسلات في كل إطار، ويزيل نفسه بمجرد خروجه من النافذة:
class Laser(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = laser_image
self.rect = self.image.get_rect(midbottom=(x, y))
def update(self):
self.rect.y -= 10
if self.rect.bottom < 0:
self.kill()مقدمة السفينة هي منتصف حافتها العلوية، لذا يكون شعاع الليزر الجديد هو Laser(player.rect.centerx, player.rect.top): يستقر منتصف حافته السفلية عند تلك النقطة.
توجد جميع أشعة الليزر في مجموعة واحدة، lasers. تؤدي ضغطة مفتاح المسافة إلى إضافة شعاع واحد إليها في حلقة الأحداث، بحيث تطلق كل ضغطة شعاعًا واحدًا. تحدّث المجموعة جميع الأشعة وترسمها؛ ارسمها قبل السفينة كي تنطلق من أسفل مقدمتها.
التحدي
متوسط- حمّل
assets/images/laser.pngإلىlaser_imageواكتب الفئةLaserأعلاه. - أنشئ
lasers = pygame.sprite.Group(). - عند وقوع حدث
KEYDOWNللمسافة، أضفLaser(player.rect.centerx, player.rect.top)إلىlasers. - في كل إطار، نفّذ
lasers.update()، وارسمlasersقبل السفينة.
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Star Patrol")
clock = pygame.time.Clock()
ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = ship_image
self.rect = self.image.get_rect(midbottom=(320, 470))
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.rect.x -= 6
if keys[pygame.K_RIGHT]:
self.rect.x += 6
self.rect.clamp_ip(screen.get_rect())
player = Player()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
player.update()
screen.fill((12, 14, 30))
screen.blit(player.image, player.rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة7دورية النجوم
سفينة الدوريةأطلق أشعة الليزر2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame