Tangkap dengan spritecollide
Termasuk bagian Sprite dan Gambar dalam perjalanan Pygame di Coddy. Pelajaran 19 dari 36.
Koin berjatuhan, dan kapal harus menangkapnya. Satu sprite melawan seluruh grup cukup dengan satu pemanggilan:
caught = pygame.sprite.spritecollide(player, coins, True)
score += len(caught)spritecollide(sprite, group, dokill) mengembalikan daftar sprite dalam grup yang rect-nya bertumpang tindih dengan rect sprite tersebut. Daftar akan kosong jika tidak ada yang bersentuhan, jadi len(caught) adalah jumlah yang tertangkap pada frame ini.
Argumen ketiga, dokill, menentukan apa yang terjadi pada sprite yang bersentuhan. True menghapusnya, sama seperti memanggil kill() pada masing-masing sprite, sehingga koin hanya tertangkap sekali. Dengan False, sprite tetap ada: cocok untuk musuh yang hanya kamu tabrak, tetapi tidak cocok untuk koin, karena koin akan menambah satu poin setiap frame saat bertumpang tindih dengan kapal.
Lakukan pengujian di bagian update perulangan, setelah sprite bergerak.
Tantangan
Sedang- Setelah
coins.update(), kumpulkan koin yang menyentuh pemain denganpygame.sprite.spritecollide, lalu hapus koin tersebut. - Tambahkan jumlah koin yang tertangkap ke
score. Kode awal sudah menampilkanScore:dan skor.
Coba sendiri
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Coin Catcher")
clock = pygame.time.Clock()
ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
coin_image = pygame.image.load("assets/images/coin.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 Coin(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = coin_image
self.rect = self.image.get_rect(center=(random.randint(20, 620), random.randint(-400, -20)))
def update(self):
self.rect.y += 2
if self.rect.top > 480:
self.rect.center = (random.randint(20, 620), -20)
player = Player()
coins = pygame.sprite.Group()
for i in range(6):
coins.add(Coin())
score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
player.update()
coins.update()
screen.fill((20, 22, 40))
coins.draw(screen)
screen.blit(player.image, player.rect)
text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(text, (10, 10))
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
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