זמן דלתא
חלק מהיחידה לולאת המשחק במסלול ה-Pygame של Coddy. שיעור 18 מתוך 32.
clock.tick(60) עושה יותר מאשר להמתין. הוא מחזיר כמה אלפיות השנייה חלפו מאז הקריאה הקודמת שלו: בערך 17 ב־60 פריימים בשנייה, ויותר מכך במחשב איטי שמתקשה לעמוד בקצב. חלקו ב־1000 ותקבלו את dt, משך הפריים בשניות:
dt = 0
while running:
# אירועים, עדכון, ציור, החלפת תצוגה
dt = clock.tick(60) / 1000dt הוא 0 בפריים הראשון, ואחר כך הוא משך הפריים האחרון. חברו את הערכים ותקבלו את הזמן שחלף מאז שהמשחק התחיל:
elapsed += dtספירת פריימים, כפי שנעשה ב־Gem Hunt, מודדת את הזמן רק בזמן שהמשחק פועל בקצב מלא של 60 פריימים בשנייה. הזמן שנמדד באמצעות dt מדויק בכל מחשב. בשאר הפרק נזיז דברים לפי זמן.
אתגר
קלהפתיל נשרף בקצב של פיקסל אחד בכל פריים. גרמו לו להישרף לפי הזמן:
- לפני הלולאה, הגדירו
elapsed = 0ו-dt = 0. - החליפו את
clock.tick(60)ב-dt = clock.tick(60) / 1000. - בלולאה, הוסיפו את
dtל-elapsed, והגדירו את רוחב הפתיל ל-max(0, 480 - elapsed * 40), כך שהוא יישרף בקצב של 40 פיקסלים בשנייה.
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Fuse")
clock = pygame.time.Clock()
width = 480
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
width = max(0, width - 1)
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (255, 150, 40), (0, 170, width, 20))
pygame.display.flip()
clock.tick(60)
pygame.quit()
כל השיעורים ביחידה לולאת המשחק
תרגלו בעצמכם: Pygame אונליין