PDA

Pogledaj cijelu verziju : 2D platformer - logički problem



Ixy
15-02-2009, 23:16
Dakle, radim na jednom 2D platformeru. Radim u Pascalu i koristim SDL library za grafiku i zvuk.
Vidim da ovdje rijetko tko radi u Pascalu, ali nije ni bitno.

Uglavnom, riješio sam kretanje, gravitaciju te učitavanje levela iz mape. I animaciju lika (dobro, ne do kraja, ali to još samo trebam ubaciti teksture koje već imam).
Jedini problem koji mi je ostao je detekcija podloge. Zasad sam skakanje napravio tako da lik normalno skoči, a kad se vrati u jednaku visinu iz koje je skočio, skok je gotov. To je bilo tek toliko da imam nekako isprobavati postavke za gravitaciju i slično. Sad još moram napraviti detekciju površine, tako da lik prekine skok tek dok sleti na neku podlogu.

E sad, mapa se učitava iz tekstualne datoteke (to mi se čini kao najbolje rješenje, jer se na brzinu može napraviti velik broj nivoa) u array (niz) varijabli.

Jedini način za koji ja znam je u svakom frejmu provjeravati jel su x i y koordinate igrača jednake onoj neke platforme (s tim da u tom slučaju petlja mora provjeriti sve tileove), što mi ne pomaže previše, jer koristi previše resursa. :(

Ako se itko dosad susreo sa sličnim problemom ili zna kako ga riješiti, bilo bi super kad bi napisao neki pseudo kod ili jednostavno riječima detaljno objasnio što i kako napraviti.
Hvala. ;D

Ghost_Rider
15-02-2009, 23:52
jeli tezak taj pascal i dal radis sam likove za igru

Luka
16-02-2009, 14:55
U čemu je problem sa x,y detekcijom?

Ja bih problem rješio (pod pretpostavkom da je svaki tile struktura sa sljedećim podacima: x, y, w, h) tako da provjerim je li lik.y > tile.y (dakle je li lik ušao u tile) i lik.y < tile.y + tile.h (tile može biti negdje u zraku, a lik na zemlji, pa je potrebna ova provjera). Osim toga trebaš provjeriti i x koordinate...

Taj kod ponavljaš za svaki tile, ili ako imaš neku optimizaciju (npr. ako je level podjeljen u sektore), za svaki tile u trenutnom sektoru.

SkunK
16-02-2009, 14:59
jeli tezak taj pascal i dal radis sam likove za igru

Čovjek postavi pitanje u nadi da ce mu netko odgovoriti, a ti kreneš s kontra pitanjima :pray:

koki007
16-02-2009, 20:13
Jedini način za koji ja znam je u svakom frejmu provjeravati jel su x i y koordinate igrača jednake onoj neke platforme (s tim da u tom slučaju petlja mora provjeriti sve tileove), što mi ne pomaže previše, jer koristi previše resursa. :(

Heh, nema drugog nacina, pozicije na ovaj ili onaj nacin jednostavno moras usporedit da bi znao. Ako provjeravanje koristi previse resursa onda moras eliminirati one tileove koje nema smisla provjeravati.

Najednostavnije da nakon loada tileove grupiras u grupe/sektore - najednostavnije preklapajuce pa onda provjeravas samo one u ono sektoru u kojem se player nalazi ... ili da igra popise/grupira sve tileove u nekom radijusu oko playera (te samo te provjerava) - nakon svakih x sekunda ili je trigger odredena kolicina pomaka

Ixy
16-02-2009, 21:37
U čemu je problem sa x,y detekcijom?


Pa zapravo ga nema, samo koristi stvarno previše procesorskog vremena.
Našao sam jedan tutorial (http://www.harveycartel.org/metanet/tutorials/tutorialB.html). Nisam ga još stigao baš pogledati, no ako to ne pomogne, pokušat ću razdijeliti nivo u sektore...

The Boz
16-02-2009, 21:46
Jel ti palo na pamet da moraš provjeravati samo y koordinate za zadanu x koordinatu lika? Usporedba prepolovljena. Još ako nekako poredaš tileove da uspoređuje samo najbliži tile, na konju su.

Ixy
16-02-2009, 22:07
:?

Ne. Moram provjeravati i x i y koordinatu i lika i tileova. Jer nivo nije jednodimenzionalan.
Evo kako meni izgleda tekst fajl iz kojeg se učitava nivo.
Primjer:

11111111111111111111

222
333 2222
3332223333
3333333333
3333333333
4444444444
1111111111111111111111

Iščitava znakove iz datoteke. Ako naiđe na razmak (' '), pomakne se za širinu tilea udesno. Ako naiđe na broj, ucrta tile. Različiti brojevi = različiti tileovi.

E sad, ne razumijem baš kako bih provjeravao samo y koordinatu.
A najbliže tileove ću i uspoređivati, ali po jednakom principu po kojoj ću provjeravati je li igraču tlo pod nogama.
Probat ću podijeliti cijeli nivo na dvodimenzionalnu mrežu i vidjeti kud s tim mogu dalje...

coyote
23-02-2009, 18:40
Evo jednog dobrog tutoriala za tile engine. Jest da je za Flash, ali to nije bitno jer princip je isti.

http://www.tonypa.pri.ee/tbw/start.html