Menu
CoddyTech

מונה פריימים

חלק מהיחידה ספרייטים ותמונות במסלול ה-Pygame של Coddy. שיעור 26 מתוך 36.

הדמות צועדת לרוחב החלון, אבל הרגליים שלה אף פעם לא זזות: היא תמיד מציגה את frames[0]. הצגת הפריים האחר בכל פעם תגרום להבהוב 60 פעמים בשנייה — מהר מדי בשביל הרגליים. השאר כל תמונה על המסך במשך כמה פריימים במקום זאת, באמצעות מונה:

timer += 1
if timer == 10:
    timer = 0
    frame_index = (frame_index + 1) % len(frames)

timer סופר פריימים. בכל 10 פריימים הוא מתחיל שוב מ־0, ו־frame_index עובר לתמונה הבאה. % len(frames) מחזיר אותו ל־0 אחרי התמונה האחרונה, כך שההליכה חוזרת על עצמה לנצח, בלי קשר למספר הפריימים ברשימה.

צייר את frames[frame_index]. בקצב של 60 פריימים בשנייה, כל תנוחה מוצגת במשך שישית שנייה: הליכה רגועה. מספר קטן מ־10 יגרום לרגליים לנוע מהר יותר.

challenge icon

אתגר

בינוני
  1. לפני הלולאה, קבעו frame_index = 0 ואת timer = 0.
  2. בכל פריים, הוסיפו 1 ל־timer; כשהוא מגיע ל־10, אפסו אותו והעבירו את frame_index לפריים הבא, עם חזרה להתחלה באמצעות % len(frames).
  3. ציירו את frames[frame_index] במיקום (x, 300).

נסו בעצמכם

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Walk Cycle")
clock = pygame.time.Clock()

sheet = pygame.image.load("assets/sheets/platformer_characters.png").convert_alpha()
frames = []
for col in (0, 1):
    frame = sheet.subsurface((col * 24, 0, 24, 24))
    frames.append(pygame.transform.scale_by(frame, 3))
x = 0

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    x += 2
    if x > 640:
        x = -72

    screen.fill((20, 22, 40))
    screen.blit(frames[0], (x, 300))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה ספרייטים ותמונות

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