Seeneline isomeetrilises projektsioonis

Korja kiiresti 10 seent, aga hoidu kärbseseentest eemale!
Liikumine: nooleklahvid või AWDS

Jätkame eelmistes loengutes/harjutustes seeneline, animeeritud (üks vaade/suund), animeeritud (4 suunda) alatud mängu arendamist.

Kokkupõrked, mask

mmorg
Isomeetrilise mängu näide

Kuna tüdruku spriit on isomeetrilises projektsioonis, poolviltu ülalt-alla vaates (tüdruku kõigis kaadrites on tema jalgade ümber vari), peaks kogu mängu käsitlema isomeetrilises vaates - see on kõige lihtsam ja levinum ruumilise (3D) vaate viis.

Isomeetria kasutamine teeb kokkupõrgete arvutamise palju loomuölikumaks - kKokkupõrkeid arvutatakse isomeetrilises mängus objektide projektsiooni järgi maapinnal, mitte kogu spriidi piirdenelinurga järgi.

Senine kokkupõrgete arvutamise meetod tekitab kokkupõrke ka siis, kui 'päriselt' peaks väga hästi liikuda saama - näiteks tüdruk ei pääse vasakul oleval pildil korjama ees olevat seent, sest kokkupõrkeid arvutatakse kogu spriidi piirdenelinurga järgi ja tüdruku ja kännu spriidid põrkuvad enne kui tüdruk pääseb seeneni (vt skeemi paremal - piirdenelinurgad on hallid).

Kui kokkupõrke arvutamisel kasutada objektide projektsiooni maapinnal (objekti vari, kui Päike oleks seniidis), pääseks tüdruk liikuma - ka siis, kui arvutuste lihtsustamiseks asendada kumerad varjud nelinurksetega (vt pilt paremal).

Kokkupõrgete arvutamisel kasutatavaid varje nimetatakse maskideks. Lisame kõigile mängu objektidele omaduse mask, mis määrab objekti koordinaatide ja mõõtude põhjal maski nelinurga omadused, näiteks tüdruku klassi kirjelduses see võiks olla

this.mask={x:this.x+this.width/3,y:this.y+3*this.height/4,w:this.width/3,h:this.height/4};

Analoogiliselt tuleb maskid määrata ka takistuste klassile (siin võib y olla püstsuunas keskel) ja seente klassile (y - kolmandik spriidi alläärest kõrgemal); maski x ja laius võivad jääda nagu spriidil.

Maskide kasutamiseks kokkupõrgete arvutamisel tuleb funktsioonis collision kõikjal kasutada objektide maski vastavaid omadusi.

Libisemine takistusel

Kui inimene kõndides kohtab takistust, ei jää ta tavaliselt seisma, vaid ainult muudab liikumise suunda, et takistusest mööda pääseda, s.t. ta ei põrku takistuselt, vaid hakkab liikuma selle serva mööda (libiseb taksituse pinnal).


Ja ongi kõik - mitte midagi keerulist!


Ülesandeid

1. Ülalkirjeldatud mäng on veel kiiresti ja kohati räpakalt programmeeritud ('quick and dirty'). Kui kangelane näiteks korjab kärbseseene, ei jää ta lebama, vaid hakkab (kord näoli, kord taevasse vaadates) maas siplema - mürgitatud tegelane peaks lamama vaikselt (ja tavaliselt selili).

2. Kui tegelane kukub pikali (mürgitatud) ja temast vasemal on kivi või känd, jääb ta nende alla - väga ebaloomulik, ta peaks lamama tühjal kohal.

3. Kui kangelane liigub paremale ja peatub, jääb tal üks jalg õhku (teistes suundades liikumisel on peatumispoos loomulik) - kuidas seda parandada ?