Menu
CoddyTech

הבזק בעת פגיעה

חלק מהיחידה צליל ותחושת משחק במסלול ה-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)

שישה פריימים הם עשירית השנייה: מספיק זמן כדי להבחין בהבהוב, וקצר מספיק כדי שהפגיעה הבאה תוכל להבהב שוב. כך השחקן יכול להבין מיד שההתקפה פגעה.

אפשר להבהב באותה דרך גם ספרייט שמבוסס על תמונה: שומרים עותק לבן של התמונה שלו, או ממלאים עותק בלבן, ומציירים אותו כל עוד המונה פעיל. במשחקים רבים השחקן מהבהב באדום כשהוא נפגע, באמצעות אותו מונה.

challenge icon

אתגר

קל

לחיצה על מקש הרווח פוגעת באויב האדום ומפחיתה את נקודות החיים שלו. גרמו לכל פגיעה להבהב:

  1. אתחלו את flash = 0 לפני הלולאה.
  2. בעת פגיעה, הגדירו flash = 6.
  3. בכל פריים, הפחיתו את flash ב־1 כל עוד הערך שלו גדול מ־0.
  4. ציירו את האויב בלבן (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()
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה צליל ותחושת משחק

תרגלו בעצמכם: Pygame אונליין