הנפשה לפי זמן
חלק מהיחידה ספרייטים ותמונות במסלול ה-Pygame של Coddy. שיעור 27 מתוך 36.
מונה פריימים קושר את האנימציה לקצב הפריימים. במחשב שמציג רק 30 פריימים בשנייה, כנפי החרק מתנופפות בחצי מהמהירות. קשרו אותה לזמן במקום זאת.
pygame.time.get_ticks() הוא מספר האלפיות השנייה שחלפו מאז pygame.init(). חלקו במשך הזמן שכל תמונה אמורה להופיע, ותקבלו כמה תמונות חלפו; % הופך את המספר הזה לאינדקס:
frame_index = pygame.time.get_ticks() // 120 % len(frames)מ־0 עד 119 אלפיות השנייה זו תמונה 0, מ־120 עד 239 אלפיות השנייה זו תמונה 1, ואז 2, ואז שוב 0. אין צורך במונה שצריך לשמור ולאפס: שורה אחת, שמחושבת מחדש בכל פריים. אם המשחק מאט, האנימציה מדלגת על תמונה במקום להאט יחד איתו.
// מחלק ומשמיט את השארית: 250 // 120 הוא 2. בשורה השלישית של הגיליון הזה מופיע חרק מעופף בשלוש תנוחות, בעמודות 6 עד 8, שכבר נחתכו ל־frames.
אתגר
בינוני- הסירו את
timerואת המונה. - בכל פריים, קבעו את
frame_indexמתוךpygame.time.get_ticks(), כך שכל אחת משלוש התמונות תוצג במשך 120 מילישניות, לפי הסדר.
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Flying Bug")
clock = pygame.time.Clock()
sheet = pygame.image.load("assets/sheets/platformer_characters.png").convert_alpha()
frames = []
for col in (6, 7, 8):
frame = sheet.subsurface((col * 24, 48, 24, 24))
frames.append(pygame.transform.scale_by(frame, 3))
frame_index = 0
timer = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
timer += 1
if timer == 10:
timer = 0
frame_index = (frame_index + 1) % len(frames)
screen.fill((20, 22, 40))
image = frames[frame_index]
screen.blit(image, image.get_rect(center=(320, 240)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
כל השיעורים ביחידה ספרייטים ותמונות
5התנגשויות מדויקות ברמת הפיקסל
מלבנים מרגישים לא הוגניםמסכותספרייטים מדויקים ברמת הפיקסלתיבות פגיעה מעגליות3מחלקות לאובייקטים במשחק
המחלקה הראשונה שלךמתודותself הוא האובייקטרשימה של אובייקטיםאובייקטים עם תמונותתת־מחלקהתרגלו בעצמכם: Pygame אונליין