وميض الإصابة
جزء من قسم الصوت وإحساس اللعب في رحلة Pygame على Coddy. الدرس 13 من 23.
عندما تصيب عدوًا، ينبغي أن تعرض اللعبة ذلك فورًا، حتى قبل أن يتغير شريط الصحة. والطريقة المعتادة هي وميض الإصابة: يُرسم العدو باللون الأبيض بالكامل لبضعة إطارات.
يتطلب ذلك عدّادًا واحدًا يحدد عدد الإطارات المتبقية للوميض. تضبطه الإصابة، ويُخفَّض في كل إطار:
flash = 0
...
# إصابة
hp -= 1
flash = 6
...
# كل إطار
if flash > 0:
flash -= 1عند الرسم، يحدد العدّاد اللون:
if flash > 0:
pygame.draw.rect(screen, (255, 255, 255), enemy)
else:
pygame.draw.rect(screen, (220, 80, 80), enemy)ستة إطارات تساوي عُشر ثانية: مدة طويلة بما يكفي لملاحظتها، وقصيرة بما يكفي ليومض العدو مجددًا عند الإصابة التالية. يستطيع اللاعب أن يعرف من النظرة الأولى أن الهجوم أصاب الهدف.
يمكن لشخصية مرسومة بصورة أن تومض بالطريقة نفسها: احتفظ بنسخة بيضاء من صورتها، أو املأ نسخة منها باللون الأبيض، ثم ارسمها أثناء عمل العدّاد. تومض شخصيات اللاعبين في ألعاب كثيرة باللون الأحمر عند تعرضها للضرر، باستخدام العدّاد نفسه.
التحدي
سهليضرب مفتاح المسافة العدو الأحمر ويقلل نقاط صحته. اجعل كل ضربة تومض:
- اجعل
flash = 0قبل الحلقة. - عند الإصابة، عيّن
flash = 6. - في كل إطار، قلّل
flashبمقدار 1 ما دام أكبر من 0. - ارسم العدو باللون الأبيض
(255, 255, 255)ما دامflashأكبر من 0، وباللون الأحمر خلاف ذلك.
جرّب بنفسك
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()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الصوت وإحساس اللعب
تدرّب بنفسك: Playground لـ Pygame