27.1. Анимације кретања¶
Кретање објеката по екрану¶
Кретање лоптице¶
Прикажимо још пример анимације организоване онако како смо описали на часу са анимацијама. Написаћемо програм који анимира лоптицу која се креће са леве ка десној ивици екрана.
Потребно је да дефинишемо променљиве које ће описивати стање објеката који се анимирају. У нашем примеру то је једна црвена лоптица, и пошто се она креће хоризонтално по средини екрана, довољно је да памтимо само њену координату
x
(то може, на пример, бити координата њеног центра, а могла би бити и, на пример, координата горњег левог темена квадрата описаног око ње). Пошто лоптица своје кретање започиње на левом крају екрана, променљивуx
ћемо иницијализовати на нулу.Функција
crtaj
се сада реализује веома једноставно. У њој бојимо позадину екрана у бело и затим исцртавамо лоптицу коришћењем вредности њеног положајаx
.При преласку на сваки нови фрејм потребно је да лоптицу померимо мало (на пример, за један пиксел) удесно. Дакле, у функцији
novi_frejm
потребно је само да увећамо вредност променљивеx
за 1. Пошто се мења вредност променљивеx
која је глобална, у функцијиnovi_frejm
морамо ту променљиву означити помоћу кључне речиglobal
. Након померања лоптице позивамо функцијуcrtaj
.
Различити начини кретања лоптице¶
Хајде сада да покушамо да програм из горњег примера модификујемо тако да се лоптица која изађе на десном крају екрана појављује поново на левом крају екрана.
Мана претходног програма је то што лоптица не испадне цела са екрана пре него што се пребаци на леву страну. Такође, када се појави на левој страни, она се већ допола види. Покушај да то поправиш.
Преправимо сада програм тако да лоптица промени полупречник сваки пут када се поново појави на левом крају екрана.
Стање сцене треба проширити глобалном променљивом
r
.У функцији
crtaj
потребно је цртати лоптицу полупречникаr
, уместо досадашњег фиксног полупречника 30.У функцији
novi_frejm
проверу да ли је лоптица испала са екрана треба прилагодити тако да ради исправно за сваку вредност полупречника. Када лоптица испадне, нови полупречник треба одабрати насумично, из интервала \([5, 30]\) (присети се, насумичан цео број добијамо функцијомrandom.randint
). Пошто се у овој функцији може променити вредност глобалних променљивихx
иr
, потребно је навести их уз кључну речglobal
.
Покушај да овај и наредне програме напишеш потпуно самостално (увек проширујући и прилагођавајући претходну верзију). Ако се негде заглавиш, потражи помоћ, па онда допуни започети програмски кôд.
Допуни сада програм тако да се свака нова лоптица креће различитом брзином.
Стање сцене је потребно допунити брзином
v
која представља брзину изражену у пикселима по фрејму (она мери колико се пиксела лоптица помери надесно у сваком фрејму).Функцију
crtaj
нема потребе мењати.У функцији
novi_frejm
, када лоптица изађе са екрана, поред промене хоризонталне позиције и насумичног одређивања полупречника, насумично јој је потребно одредити и брзину (на пример, цео број између 1 и 10). Пошто ова функција мења сада и глобалну променљивуv
, и та променљива треба да буде означена кључном речјуglobal
.
Допуни сада програм тако да се свака нова лоптица креће на различитој висини. Висину бирај насумично, али тако да лоптица цела буде унутар прозора.
Једини параметар лоптице који се за сада никада не мења је боја. На крају, допуни програм тако да се и боја сваке нове лоптице бира насумично.
Вежбе ради, измени претходни програм тако да се лоптице крећу здесна налево.