Кейіпкерлерді анимациялау
Анықтама
Анимация — қозғалыс иллюзиясы: әр кадрда нысанның координатасын аздап өзгертіп, экранды қайта салу. Кадрлар жылдам ауысқанда көз үздіксіз қозғалысты көреді.
x = 100
while running:
...
x += 3
screen.blit(fon, (0, 0))
screen.blit(hero, (x, 200))
pygame.display.update() Анықтама
Жылдамдық — бір кадрдағы жылжу шамасы (пикселмен): x += speed. Таңбасы бағытты береді: оң — оңға/төмен, теріс — солға/жоғары.
Анықтама
FPS (frames per second) — секундтағы кадр саны. clock = pygame.time.Clock() және циклде clock.tick(60) — ойынды 60 кадр/сек жылдамдықпен шектейді, әйтпесе әр компьютерде әртүрлі жылдамдықпен жүреді.
clock = pygame.time.Clock()
while running:
clock.tick(60)
... Анықтама
Шекарадан серпілу — координат шетке жеткенде жылдамдықтың таңбасын ауыстыру: if x <= 0 or x >= 750: speed = -speed. Доп «қабырғадан» секіреді.
x, speed = 100, 5
while running:
clock.tick(60)
x += speed
if x <= 0 or x >= 750:
speed = -speed
... Кадрлық анимация — жүру эффектісі үшін бірнеше суретті кезектестіру: суреттер тізімге жиналып (4-бөлім!), кезекпен көрсетіледі: kadrlar[nomer % len(kadrlar)].
Деңгей: Оңай Неше кадрда жетеді?
Берілді: Кейіпкер x = 100-ден басталып, әр кадрда x += 4. Мақсат — x = 300.
Табу керек: Неше кадр қажет?
Шешуі:
Жол: 300 − 100 = 200 пиксель. Кадр саны: 200 / 4 = 50.
Жауабы: 50 кадр (60 FPS-те — бір секундтан аз).
Деңгей: Орта clock.tick не үшін?
Берілді: clock.tick(60) жазылмаған ойын әлсіз ноутбукте баяу, қуатты компьютерде «ұшып» жүреді.
Табу керек: Себебі мен шешімі.
Шешуі:
Шектеусіз цикл әр компьютерде өз жылдамдығымен айналады: кадр көп = қозғалыс жылдам. clock.tick(60) барлық компьютерде 60 FPS-ке теңестіреді.
Жауабы: clock.tick(60) қосу — ойын жылдамдығы құрылғыға тәуелсіз болады.