Hapus dengan kill()
Termasuk bagian Sprite dan Gambar dalam perjalanan Pygame di Coddy. Pelajaran 18 dari 36.
Tekan Space dan kapal menembak: setiap tekanan menambahkan sprite Laser ke grup lasers, dan penghitung di kiri atas menunjukkan jumlah sprite yang ada di grup tersebut. Tembakkan beberapa laser dan lihat jumlahnya bertambah. Laser terbang ke luar bagian atas layar dan tidak pernah terlihat lagi, tetapi grup tetap menyimpan semuanya, serta terus memperbarui dan menggambar semuanya. Setelah beberapa menit bermain, jumlahnya mencapai ribuan laser yang tidak terlihat.
Sprite yang sudah selesai menghapus dirinya sendiri dengan kill():
def update(self):
self.rect.y -= 10
if self.rect.bottom < 0:
self.kill()kill() mengeluarkan sprite dari setiap grup tempatnya berada. Sprite itu tidak lagi diperbarui atau digambar, dan Python membebaskannya setelah tidak ada variabel yang merujuk kepadanya. Periksa bottom, bukan top: laser baru pergi setelah piksel terakhirnya keluar dari jendela, tidak saat sebagian laser masih terlihat.
sprite.alive() bernilai True selama sprite berada di setidaknya satu grup.
Tantangan
MudahDi Laser.update, setelah bergerak, panggil self.kill() saat rect.bottom laser berada di atas bagian atas jendela (kurang dari 0). Penghitung akan kembali ke 0 setelah semua laser keluar.
Coba sendiri
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Lasers")
clock = pygame.time.Clock()
ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
laser_image = pygame.image.load("assets/images/laser.png").convert_alpha()
font = pygame.font.Font(None, 32)
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())
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
player = Player()
lasers = pygame.sprite.Group()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
lasers.add(Laser(player.rect.centerx, player.rect.top))
player.update()
lasers.update()
screen.fill((20, 22, 40))
lasers.draw(screen)
screen.blit(player.image, player.rect)
count = font.render(f"Lasers: {len(lasers)}", True, (240, 240, 240))
screen.blit(count, (10, 10))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Semua pelajaran di Sprite dan Gambar
2Putar, 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