Menu
CoddyTech

Lazerleri Ateşle

Coddy'nin Pygame Journey'sinin Sprite'lar ve Görseller bölümünün bir parçası. Ders 30 / 36.

Gemi lazerleri dümdüz yukarı ateşler. Lazer, geminin burnundan başlayıp her karede 10 piksel uçan ve pencerenin dışına çıktığında kendini silen bir grafiktir:

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()

Geminin burnu üst kenarının ortasıdır; bu nedenle yeni bir lazer Laser(player.rect.centerx, player.rect.top) olur: alt orta noktası bu noktaya denk gelir.

Tüm lazerler tek bir grupta, lasers, bulunur. Boşluk tuşuna basılması, olay döngüsünde gruba bir lazer ekler; böylece her basışta bir kez ateş edilir. Grup hepsini günceller ve çizer; geminin burnunun altından çıkmaları için onları gemiden önce çizin.

challenge icon

Görev

Orta
  1. assets/images/laser.png dosyasını laser_image içine yükle ve yukarıdaki Laser sınıfını yaz.
  2. lasers = pygame.sprite.Group() oluştur.
  3. Space için bir KEYDOWN olayı gerçekleştiğinde Laser(player.rect.centerx, player.rect.top) nesnesini lasers grubuna ekle.
  4. Her karede lasers.update() çağrısı yap ve gemiden önce lasers grubunu çiz.

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Sprite'lar ve Görseller bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground