הבזק בעת פגיעה
חלק מהיחידה צליל ותחושת משחק במסלול ה-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()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה צליל ותחושת משחק
תרגלו בעצמכם: Pygame אונליין