Menu
CoddyTech

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 -= 1

Saat 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.

challenge icon

Tantangan

Mudah

Tombol Space mengenai musuh merah dan mengurangi HP-nya. Buat setiap serangan membuatnya berkedip:

  1. Buat flash = 0 sebelum perulangan.
  2. Saat terkena serangan, atur flash = 6.
  3. Setiap frame, kurangi flash sebanyak 1 selama nilainya lebih dari 0.
  4. Gambar musuh dengan warna putih (255, 255, 255) selama flash lebih 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()
quiz iconUji dirimu

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

Semua pelajaran di Suara dan Sensasi Bermain

Latihan sendiri: Playground Pygame