30.1. Комбиновање догађаја и анимација¶
У неким ситуацијама желимо да комбинујемо анимације и догађаје. На
пример, желимо да мишем померамо анимиране ликове по екрану. То није
тешко остварити коришћењем техника које смо већ објаснили у поглављима
о анимацијама и догађајима. У наредним програмима обично ће корисник
дефинисати три помоћне функције: crtaj
, novi_frejm
и
obradi_dogadjaj
и њихов ће задатак бити исти као и у програмима
које смо до сада писали.
Коришћење библиотеке PyGameBg омогућава да се функцији frame_loop
као трећи параметар зада и функција obradi_dogadjaj
, чиме се
постиже да се приликом преласка на сваки наредни фрејм обраде сви
догађаји који су наступили између приказивања два фрејма.
Нагласимо да се догађаји не обрађују чим наступе, па ако је фреквенција смењивања фрејмова ниска, тада корисник може осетити мали застој у одзиву програма.
Корачање до циља¶

Лик стоји на малој платформи која се мишем може померати лево-десно. Када се платформа помери, лик полако корача све док не стигне до ње.
Коришћење тајмера¶
Још једно решење за прављење анимација je да се направи
тајмер (енг. timer), који ће откуцавати у правилним временским
интервалима. Тајмер почиње са откуцавањем позивом функције
pg.time.set_timer
. Сваки пут када откуца, генерише се
догађај који смо навели као први аргумент у позиву функције
pg.time.set_timer
, док је други аргумент у позиву број милисекунди
након којих поново откуцава. Програмер, дакле, одређује који ће
догађај бити последица откуцаја тајмера (најчешће се користи
догађај pg.USEREVENT
, који се не догађа аутоматски, већ се управо
користи за овакве сврхе).
Откуцај тајмера је догађај као и сваки други, па се и основна структура програма поклапа са оном коју смо користили у програмима у којима смо обрађивали догађаје.
Прегледности ради, догађај откуцаја тајмера можемо обрађивати у посебној помоћној функцији. Посматрајмо наредни кôд заснован на библиотеци PyGameBg.
Поновним позивом функције set_timer
можемо променити интервал у
ком ће тајмер откуцавати.
Ево неколико примера у којима се користи тајмер.
Померање анимираног лика¶

Напиши програм који омогућава да се стрелицама помера лик који све време корача.
Покушај да овај задатак урадиш и без тајмера, коришћењем петље засноване на фрејмовима. Да би одзив тастатуре био задовољавајући, тј. да би се догађаји обрађивали чешће, мораћеш да повећаш фреквенцију фрејмова (250 милисекунди одговара фреквенцији од четири фрејма по секунди) и да исту слику приказујеш више пута.