Menu
CoddyTech

أطلق أشعة الليزر

جزء من قسم الكائنات والصور في رحلة 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. تؤدي ضغطة مفتاح المسافة إلى إضافة شعاع واحد إليها في حلقة الأحداث، بحيث تطلق كل ضغطة شعاعًا واحدًا. تحدّث المجموعة جميع الأشعة وترسمها؛ ارسمها قبل السفينة كي تنطلق من أسفل مقدمتها.

challenge icon

التحدي

متوسط
  1. حمّل assets/images/laser.png إلى laser_image واكتب الفئة Laser أعلاه.
  2. أنشئ lasers = pygame.sprite.Group().
  3. عند وقوع حدث KEYDOWN للمسافة، أضف Laser(player.rect.centerx, player.rect.top) إلى lasers.
  4. في كل إطار، نفّذ 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()
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الكائنات والصور

تدرّب بنفسك: Playground لـ Pygame