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.
Görev
KolayBoş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:
- Döngüden önce
flash = 0yapın. - Bir vuruşta
flash = 6yapın. - Her karede,
flash0'dan büyük olduğu sürece değerini 1 azaltın. flash0'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()
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
4Ekran Sarsıntısı ve Darbe Parlaması
Ekran SarsıntısıDarbe ParlamasıDarbe DurdurmasıAbartıdan Kaçının6Yıldız Devriyesini Geliştir
Yıldız Devriyesi SesleriHer Vuruşta KıvılcımlarKendi başına pratik yap: Pygame playground