Menu
CoddyTech

Darbe Parlaması

Coddy'nin Pygame Journey'sinin Ses ve Oyun Hissi bölümünün bir parçası. Ders 13 / 23.

Bir düşmana vurduğunda, sağlık çubuğu değişmeden önce bile oyun bunu hemen göstermelidir. Yaygın yöntem bir vuruş parlamasıdır: Düşman birkaç kare boyunca tamamen beyaz çizilir.

Parlamanın kaç kare daha süreceğini tutan tek bir sayaç gerekir. Bir vuruşta sayaç ayarlanır; her karede değeri azalır:

flash = 0
...
# bir darbe
hp -= 1
flash = 6
...
# her karede
if flash > 0:
    flash -= 1

Çizim sırasında sayaç rengi belirler:

if flash > 0:
    pygame.draw.rect(screen, (255, 255, 255), enemy)
else:
    pygame.draw.rect(screen, (220, 80, 80), enemy)

Altı kare, saniyenin onda biridir: Görmek için yeterince uzun, sonraki vuruşun yeniden parlayabilmesi içinse yeterince kısadır. Oyuncu, saldırının isabet ettiğini bir bakışta anlayabilir.

Görsel kullanan bir sprite da aynı şekilde parlayabilir: Görselinin beyaz bir kopyasını sakla ya da bir kopyasını beyaza boya ve sayaç çalışırken bunu ekrana çiz. Birçok oyun, oyuncu hasar aldığında aynı sayacı kullanarak onu kırmızı renkte parlatır.

challenge icon

Görev

Kolay

Boşluk tuşu kırmızı düşmana vurur ve HP değerini azaltır. Her vuruşta bir anlığına parlamasını sağlayın:

  1. Döngüden önce flash = 0 yapın.
  2. Bir vuruşta flash = 6 yapın.
  3. Her karede, flash 0'dan büyük olduğu sürece değerini 1 azaltın.
  4. flash 0'dan büyükken düşmanı beyaz (255, 255, 255), aksi hâlde kırmızı çizin.

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Ses ve Oyun Hissi bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground