U prethodnom bloku napravili smo igrača koji može da se kreće pomoću tastature.

Naša igra sada izgleda otprilike ovako:

┌─────────────────────────────┐
│                             │
│          ■                  │
│        IGRAČ                │
│                             │
│     ███████                 │
│                             │
│                             │
└─────────────────────────────┘

Ali postoji problem: аko igrač dođe do zida, može jednostavno da prođe kroz njega.

       ■  →  █████
       
       ■  →  █████
              ↓
        igrač prolazi
        kroz zid

To u većini igara nije ono što želimo.  Zato ćemo danas naučiti šta je sudar.


1. Šta je sudar?

Sudar nastaje kada dva objekta dođu u kontakt.

U igri to mogu biti:

  • igrač i zid;

  • igrač i predmet;

  • igrač i neprijatelj;

  • metak i neprijatelj;

  • neprijatelj i zid.

Na primer:

IGRAČ        ZID

  ■    →    █████

Kada igrač dođe do zida, nastaje sudar.

U GameMaker-u za takvu situaciju koristimo Collision Event.


2. Collision Event

Do sada smo koristili događaje povezane sa tastaturom:

Keyboard Left
Keyboard Right
Keyboard Up
Keyboard Down

Sada uvodimo novi tip događaja:

Collision

Collision Event možemo posmatrati kao pitanje:

„Šta treba da se dogodi kada ovaj objekat dođe u kontakt sa drugim objektom?“

Na primer:

obj_player
     +
obj_wall
     ↓
Collision
     ↓
reakcija

3. Zašto nam je Collision potreban?

Bez Collision Event-a imamo:

IGRAČ → ZID

i igrač može da prođe kroz zid.

Sa pravilno definisanim ponašanjem imamo:

IGRAČ → ZID
          ↓
       prepreka

Dakle, sudar omogućava da objekti međusobno reaguju.


4. Primer — igrač i zid

Imamo:

obj_player

i:

obj_wall

Za obj_player možemo napraviti:  Collision with obj_wall

To znači:

„Kada igrač dođe u kontakt sa zidom, izvrši određene akcije.“

Šta će se tačno dogoditi zavisi od pravila igre.

Za naš prvi primer želimo:

Igrač ne može da prođe kroz zid.


5. Prepreka nije samo slika

Važno je razumeti razliku između:

spr_wall

i:

obj_wall

spr_wall predstavlja izgled zida.

obj_wall predstavlja objekat zida.

Kada želimo da definišemo pravilo:

„Igrač ne sme da prođe kroz zid.“

radimo sa objektima:

obj_player
     ↕
obj_wall

a ne samo sa slikama.


6. Collision i akcija

Kao i kod tastature, imamo:

DOGAĐAJ
   ↓
AKCIJA
   ↓
REAKCIJA

Kod sudara:

Collision with obj_wall
          ↓
        akcija
          ↓
  igrač reaguje na zid

Događaj sam po sebi nije cela igra.

On samo kaže:

„Ovo se dogodilo.“

Akcija određuje:

„Šta sada treba uraditi?“


7. Igrač i zid

Naš objekat:

obj_player

može imati više događaja:

Keyboard Left
Keyboard Right
Keyboard Up
Keyboard Down

Collision with obj_wall

Dakle, jedan objekat može imati različite reakcije na različite događaje.

                  obj_player
                      │
       ┌──────────────┼──────────────┐
       ↓              ↓              ↓
   Keyboard        Keyboard      Collision
      Left           Right       obj_wall
       ↓              ↓              ↓
    pomeri se      pomeri se      reaguj

8. Šta želimo da postignemo?

Naša scena treba da se ponaša ovako:

┌─────────────────────────────┐
│                             │
│      ■ →                    │
│                             │
│             ███████         │
│                             │
│                             │
└─────────────────────────────┘

Kada igrač dođe do zida:

      ■ → ███████

ne sme da nastavi kroz zid.


9. Testiranje sudara

Kada napravimo Collision Event, igru treba testirati.

Nije dovoljno samo pogledati da li je događaj napravljen.

Treba:

  1. pokrenuti igru;

  2. pomeriti igrača;

  3. pronaći zid;

  4. pokušati da prođemo kroz zid;

  5. proveriti rezultat.

Testiranje je važan deo izrade igre.


10. Više zidova

U Room-u možemo imati više primeraka istog objekta:

obj_wall
obj_wall
obj_wall
obj_wall

I dalje imamo samo jedan tip objekta:

obj_wall

Ali ga možemo postaviti više puta.

Ako obj_player ima Collision Event sa obj_wall, pravilo važi za sve postavljene zidove tog objekta.

To znači da ne moramo praviti poseban Collision Event za svaki zid.


11. Zidovi mogu napraviti nivo

Od objekata zida možemo napraviti:

  • hodnik;

  • lavirint;

  • prostoriju;

  • granice nivoa;

  • prepreke.

Na primer:

┌──────────────────────────────┐
│██████████████████████████████│
│█                            █│
│█      ■                     █│
│█      PLAYER                █│
│█                            █│
│█   ██████      ███████      █│
│█                            █│
│█       ███████              █│
│█                            █│
│██████████████████████████████│
└──────────────────────────────┘

Sada već imamo nešto što liči na pravi nivo igre.


12. Šta je Bounding Box / granica objekta?

Za sudare GameMaker mora da zna koji deo Sprite-a pripada objektu.

To možemo jednostavno posmatrati kao njegovu granicu.

Na primer:

      ┌───────┐
      │   ■   │
      │ PLAYER│
      └───────┘

Kada se granice igrača i zida dodirnu, GameMaker može registrovati sudar.

Za početak nije potrebno detaljno proučavati matematički model sudara.

Važno je razumeti:

GameMaker koristi granice objekata da bi utvrdio da li su objekti u kontaktu.


13. Eksperiment

Postaviti igrača blizu zida.

Pokrenuti igru.

Pokušati da se prođe kroz zid.

Zatim promeniti ponašanje igrača prilikom sudara.

Ponovo pokrenuti igru.

Posmatrati  razliku.

Pitanje:

„Koji događaj se dogodio kada je igrač dodirnuo zid?“

Odgovor:

Collision Event.


14. Samostalni zadatak

Napraviti nivo sa:

  • jednim igračem;

  • najmanje šest zidova;

  • najmanje jednim dodatnim objektom;

  • mogućnošću kretanja igrača;

  • Collision Event-om između igrača i zida.

Igrač ne sme jednostavno da prolazi kroz zidove.

Nivo treba da ima oblik jednostavne prostorije ili lavirinta.


15. Dodatni zadatak

Napraviti zatvorenu prostoriju:

████████████████████
█                  █
█                  █
█       ■          █
█                  █
█                  █
████████████████████

Igrač ne sme da izađe van prostorije.


16. Pitanja za proveru znanja

  1. Šta je sudar?

  2. Šta je Collision Event?

  3. Između kojih objekata može nastati sudar?

  4. Zašto nam je Collision potreban?

  5. Koja je razlika između spr_wall i obj_wall?

  6. Da li jedan Object može imati više različitih događaja?

  7. Šta se događa kada igrač dodirne zid?

  8. Da li moramo napraviti poseban objekat za svaki zid?

  9. Zašto je važno testirati igru?

  10. Šta GameMaker koristi da bi odredio da li su objekti u kontaktu?


Last modified: Tuesday, 22 September 2026, 6:24 PM