Садржај
1. Робот Карел - линијски програми и бројачка петља
2. Робот Карел - условна петља и гранање
3. Робот Карел - задаци за вежбање
4. Корњача графика - линијски програми и петље
5. Корњача графика - гранање, угнежђене петље, функције, торке и листе
6. Корњача графика - задаци за вежбање
9. Израчунавања - коришћење и дефинисање функција
10. Израчунавања - задаци за вежбање
13. Контрола тока - вежбање
17. Програмирање 2Д графике - Увод у Pygame

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.

Допуни сада програм тако да се свака нова лоптица креће на различитој висини. Висину бирај насумично, али тако да лоптица цела буде унутар прозора.

Једини параметар лоптице који се за сада никада не мења је боја. На крају, допуни програм тако да се и боја сваке нове лоптице бира насумично.

Вежбе ради, измени претходни програм тако да се лоптице крећу здесна налево.

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+