Kilatan Saat Terkena Serangan
Termasuk bagian Suara dan Sensasi Bermain dalam perjalanan Pygame di Coddy. Pelajaran 13 dari 23.
Saat kamu mengenai musuh, game harus langsung menampilkannya, bahkan sebelum bilah kesehatannya berubah. Cara yang umum adalah kilatan saat terkena serangan: selama beberapa frame, musuh digambar serba putih.
Caranya hanya memerlukan satu penghitung, yaitu jumlah frame yang tersisa untuk kilatan. Serangan akan mengaturnya, lalu nilainya berkurang setiap frame:
flash = 0
...
# terkena serangan
hp -= 1
flash = 6
...
# setiap frame
if flash > 0:
flash -= 1Saat menggambar, penghitung menentukan warnanya:
if flash > 0:
pygame.draw.rect(screen, (255, 255, 255), enemy)
else:
pygame.draw.rect(screen, (220, 80, 80), enemy)Enam frame sama dengan sepersepuluh detik: cukup lama untuk terlihat, tetapi cukup singkat agar serangan berikutnya bisa memicu kilatan lagi. Pemain bisa langsung tahu bahwa serangannya mengenai musuh.
Sprite yang menggunakan gambar juga bisa berkedip dengan cara yang sama: simpan salinan gambarnya yang berwarna putih, atau isi salinan gambar dengan warna putih, lalu blit salinan itu selama penghitung masih berjalan. Banyak game membuat sprite pemain berkedip merah saat terkena damage, menggunakan penghitung yang sama.
Tantangan
MudahTombol Space mengenai musuh merah dan mengurangi HP-nya. Buat setiap serangan membuatnya berkedip:
- Buat
flash = 0sebelum perulangan. - Saat terkena serangan, atur
flash = 6. - Setiap frame, kurangi
flashsebanyak 1 selama nilainya lebih dari 0. - Gambar musuh dengan warna putih
(255, 255, 255)selamaflashlebih dari 0, jika tidak, gunakan warna merah.
Coba sendiri
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Training Dummy")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
hit_sound = pygame.mixer.Sound("assets/sounds/hit.ogg")
player = pygame.Rect(120, 150, 60, 60)
enemy = pygame.Rect(300, 150, 60, 60)
hp = 5
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 and hp > 0:
hp -= 1
hit_sound.play()
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), player)
if hp > 0:
pygame.draw.rect(screen, (220, 80, 80), enemy)
label = font.render(f"Enemy HP: {hp}", True, (240, 240, 240))
screen.blit(label, (300, 110))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Suara dan Sensasi Bermain
4Guncangan Layar dan Kilatan Saat Terkena Serangan
Guncangan LayarKilatan Saat Terkena SeranganJeda BenturanJangan BerlebihanLatihan sendiri: Playground Pygame