Догађаји миша

У примеру „прекидач” смо показали како можемо да реагујемо у програму када корисник притисне тастер миша. Иако корисник посматра клик као једну акцију, видели смо да је за рачунар то низ догађаја који почиње догађајем типа pg.MOUSEBUTTONDOWN.

У наредним примерима и задацима ћемо користити укупно три типа догађаја који настају употребом миша:

Објекти - догађаји чији је тип pg.MOUSEBUTTONDOWN садрже и неке додатне податке, као што су:

Неки од додатних података о догађају, које садрже објекти - догађаји типа pg.MOUSEMOTION су:

Обрада клика - вежбање

Можда нисте приметили да у програму „прекидач” из претходне лекције светло може да се укључи и искључи било којим тастером миша. То је тако јер се догађај истог типа генерише за сваки тастер миша, а ми нисмо проверавали који тастер је био притиснут приликом наступања догађаја.

Задатак - леви тастер као прекидач: Ископирајте овде програм „прекидач”, а затим га дорадите тако да се укључивање и искључивање сијалице може обавити само левим тастером миша.

Помоћ: Користите податак dogadjaj.button.

Задатак - три прекидача: Искористите делове програма „прекидач” и направите програм који симулра рад три прекидача, као у примеру.

../_images/Shema3_Off.png ../_images/Shema3_On.png ../_images/SwitchOff.png ../_images/SwitchOn.png ../_images/BulbOff.png ../_images/BulbOn.png

Остали догађаји миша

Као што је на почетку ове лекције речено, у програму се може реаговати и на догађаје отпуштања тастера миша и померања миша. Ради тога је потребно упоредити вредност dogadjaj.type са константама pg.MOUSEBUTTONUP и pg.MOUSEMOTION. Следе задаци у којима можете ово и да испробате.

Задатак - цртање линија: Довршите програм тако да се помоћу њега могу цртати праве линије, као у примеру.

Задатак - цртање линија са брисањем: Ископирајте доле програм за цртање линија, а затим додајте могућност да се све линије обришу кликом на десни тастер миша.

Помоћ: Да бисмо у програму разликовали леви и десни тастер миша, поново треба користити податак dogadjaj.button. Код у функцији obradi_dogadjaj сада треба да изгледа отприлике овако:

Задатак - превлачење: Следећи програм показује како да кориснику нашег програма омогућимо превлачење објеката.

Испробајте програм (превуците јабуке у корпу) и потрудите се да га разумете, а затим одговорите на питања испод.

../_images/apple.png ../_images/basket.png ../_images/drag_scene.png

    Q-78: Шта представља променљива i_jabuka у програму?

  • редни број јабуке коју цртамо
  • Покушајте поново
  • редни број јабуке коју превлачимо
  • Тачно
  • укупан број јабука
  • Покушајте поново
  • број преосталих јабука на дрвету
  • Покушајте поново
    Q-79: Упари провере у програму са њиховим значењем. Покушајте поново!
  • if mis_je_na_slici(dogadjaj.pos, korpa_poz, korpa_slika):
  • да ли јабуку треба обрисати
  • if mis_je_na_slici(dogadjaj.pos, pozicije_jabuka[i]
  • да ли је корисник "узео" јабуку
  • if len(pozicije_jabuka) == 0:
  • да ли је игра завршена
  • if i_jabuka >= 0:
  • да ли је у току превлачење

    Q-80: Како у програму разликујемо превлачење од обичног померања миша?

  • очитавамо да ли је тастер миша доле током померања
  • То није згодан начин, јер тастер може бити притиснут на празном месту (корисник није "узео" предмет који треба да превлачи)
  • превлачење је посебан тип догађаја
  • Не, не постоји такав тип догађаја
  • при обичном померању миша редни број "јабуке коју превлачимо" је -1
  • Тачно