Menu
CoddyTech

Tembakkan Laser

Termasuk bagian Sprite dan Gambar dalam perjalanan Pygame di Coddy. Pelajaran 30 dari 36.

Kapal menembakkan laser lurus ke atas. Laser adalah sprite yang muncul dari bagian depan kapal, melesat sejauh 10 piksel per frame, lalu menghapus dirinya sendiri setelah keluar dari jendela:

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

Bagian depan kapal berada di tengah tepi atasnya, jadi laser baru dibuat dengan Laser(player.rect.centerx, player.rect.top): bagian tengah bawahnya berada di titik tersebut.

Semua laser berada dalam satu grup, lasers. Menekan Spasi menambahkan satu laser ke grup tersebut di dalam perulangan peristiwa, sehingga setiap kali ditekan, satu laser ditembakkan. Grup akan memperbarui dan menggambar semuanya. Gambar laser sebelum kapal agar laser tampak keluar dari bagian bawah depannya.

challenge icon

Tantangan

Sedang
  1. Muat assets/images/laser.png ke dalam laser_image dan tulis class Laser di atas.
  2. Buat lasers = pygame.sprite.Group().
  3. Saat terjadi event KEYDOWN untuk tombol Space, tambahkan Laser(player.rect.centerx, player.rect.top) ke lasers.
  4. Pada setiap frame, jalankan lasers.update(), lalu gambar lasers sebelum pesawat.

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Sprite dan Gambar

Latihan sendiri: Playground Pygame