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.
Tantangan
Sedang- Muat
assets/images/laser.pngke dalamlaser_imagedan tulis classLaserdi atas. - Buat
lasers = pygame.sprite.Group(). - Saat terjadi event
KEYDOWNuntuk tombol Space, tambahkanLaser(player.rect.centerx, player.rect.top)kelasers. - Pada setiap frame, jalankan
lasers.update(), lalu gambarlaserssebelum 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()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Sprite dan Gambar
1Memuat Gambar
Muat GambarTempatkan dengan RectPindahkan GambarBuat Latar BerulangPiksel Tembus Pandang7Patroli Bintang
Kapal PatroliTembakkan Laser2Putar, Cerminkan, Ubah Skala
Putar Mengelilingi Titik TengahHadap ke Arah TerbangmuUbah Skala GambarPutar dari Gambar Asli3class untuk object game
class pertamamumethodself adalah objectlist berisi objectobject dengan gambarsubclass6Animasi dari Sprite Sheet
Memotong Sprite SheetPenghitung FrameMenganimasikan dengan WaktuLedakan Sekali JalanLatihan sendiri: Playground Pygame