Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 25. květen 2009, 09:40:16 Předmět: (2D) TileEngine |
|
|
potřeboval bych trochu porad s tim jak udelat TileEngine, doufám že sem to nedal do moc špatné kategorie, zatím to mám vymyšlený nějak takhle:
Roviny
no, tohle je největší problém s kterým potřebuju poradit.
http://grim.havoc.sweb.cz/game.png
říkal sem si že by nebylo špatný kdybych měl most pod kterým se dá chodit.
sice se mi jakž takž povedlo udělat co sem chtěl ale funguje to špatně, má to moc omezení (rovina 2 buď musí být vždy nad rovinou jedna, nebo musí být někde nějaka proměnná která říká jak to je), a v editoru nikdo nepříjde na to jak to nakreslit
(veskutečnsoti to není tak důležitý, takže to možná radši vynechám)
Vrstvy
vrstva0 - vykresluje se pod vším
vrstva1 - vykresleuje se pod/nad spritama v zavislosti na tom jak moc je sprit "dole" na mapě
vrstva2 - vykresluje se nad vším
(tohle je předpokládam v pořádku, jakože zatím sem nenarazil na nic kde by nestačili a většina SNES her používá tři vrstvy)
Kolize
mám dvakrát větší mřížku než je mapa na kolize, bohužel sou to pořád jen čtverečky a ne trojůhelníky (v tom jednom tilu) nebo nějaký složitější tvary
(problém je že když bych to celý proměnil třeba na polygon, nevím jak bych udělal takový to "posouvání" směrem k díře když se snažís vlézt mezi dva kameny třeba)
tak jestli tu někdo dělal tileengine s rovinama nebo nějakýa složitějšíma kolizema, tak ocením jakýkoliv rady, dik |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 25. květen 2009, 12:45:05 Předmět: |
|
|
K mostum: tady ti pouhe 2D nestaci. Doporucuju prestat premyslet nad tim, jak 2D ohackovat, ale rovnou zavest 3D. (Teda pokud se bez mostu neobejdes.) Nemyslim ted 3D ve smyslu, ze tam budes mit 3D modely z polygonu, ale to, ze herni objekty dostanou krome X,Y jeste Z souradnici. A dale uz postupujes v podstate tak jak jsi rikal: Muzes tam mit vrstvy, kdy Z znamena, do jake vrstvy objekt patri, a grafika horni vrstvy prekryva grafiku spodnejsi vrstvy.
Nebo muzes pracopvat s plynule menicim se Z - tady by Z znamenalo opravdovou vysku a mel bys opravdove 3d.
- Muzes jit do plneho 3D s perspektivni kamerou, ale to by bylo na jine tema
- Muzes ale zustat u ortogonalni projekce (abys mohl obrazky rucne kreslit (ale ony se stejne nakonec modeluji v nejakem 3d programu)) (Ortogonalni projekce je takova, ze paprsky jdou ke kamere rovnobezne, coz znamena, ze at umistis objekt na libovolne souradnice X,Y,Z, stale pouzivas ten samy obrazek, nic se ti nezmensuje, nezvetsuje, nezkresluje perspektivou)
Priklady techto projekci: ten tvuj priklad s mostem, Krkal (www.krkal.org), Starcraft, UFO 1, Prince of Persia 1, atd.
- btw Z se stejne hodi pro letajici jednotky
Ta ortogonalni projekce (libovolna) v podstate funguje tak, ze vyslednou pozici obrazku na obrazovce spocitas podle tohoto vzorce:
Xs = X + k*Z
Ys = Y + l*Z
kde k, l jsou nejake konstanty, urcujici o jakou projekci se jedna. Podle toho jak moc je objekt vysoko, bude na obrazovce posunut. (V tvem priklade s mostem se objekty vysoko, posouvaji na obrazovce nahoru)
Tak tohle byl takovy uvod. Horsi je to pak s viditelnostnim tridenim. To je ale na delsi povidani. Mam s tim zkusenosti, tak mohu poradit, kdyby ses touhle cestou chtel vydat.
Jinak 2D hry znaji jeste dalsi typ vrstev a to jsou vrstvy pro paralaxni scrolling. Tyhle vrstvy jsou uz naprosto oddelene a pri scrollingu kazda jede jinou rychlosti.
Kolize
ja bych se omezil na nejake jednoduche kolize pomoci obalovych teles (obdelniky, kruhy). Pokud mas casto ruzne velike a do mrizky nezarovnane objekty, tak bych je usporadal asi v quadtree. Jinak bych pouzil mrizku (bunky, policka). Pomoci techto struktur umim jednoduse zjistit, zda jsem ci nejsem v kolizi. Kdyby ti nahodou obalova telesa nestacila, necht takovy objekt si implementuje vlastni funkci pro kolizni test.
Pathfinding: Kdyby byla fakt slozita geometrie (treba neco 3D) a nesel by pathfinding resit postupnym prohledavanim sousednich policek (zda jsou volna), tak bych pouzil nejake pomocne vecicky: Roviny (polygony) po kterych se da chodit a waypointy. A samosebou A* algoritmus.
Edit: Pokud zavedes treti souradnici Z, tak i kolize pak musis resit ve 3D (nebo "3D") (Proto je dobre s tim 3D plne pocitat od zacatku, ovlivni to spoustu veci) _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 25. květen 2009, 13:06:33 Předmět: |
|
|
pouzivam XNA, takze tam muzu nastavovat hloubku pri vykreslovani textur
mas pravdu, sem moc zblbej tema hrama z emulatoru ktery musi setrit vykon a pamet, staci abych si tam dal neomezene velky pole rovin (ta chyba byla ze sem chtel mit jenom dvě) a čím nižší číslo roviny tím "níž" to vykreslim, respektive ješte bude potřeba mít proměnnou neutrality roviny,
a když na takovej tile vstoupím tak pokud stojím na plane 1 a ten tile je plane 2 neutrální tak se vykreslím pod layer 2 (tohle je případ kdy stojím pod mostem) takhle sem to chtěl udělat i předtím, ale předtím sem měl jen dvě roviny a 2 neznamenalo že je vyš než 1
ale i tak nenastane tam problem kdyz budu stat 1 tile "pod" (směrem po y), nepotřebuju ten sprite "rozkouskovat" a u každýho toho kousku kontrolovat na jaké rovině stojí a zvlášt vykreslovat každej "čtvereček" spritu?
ad paralax scrolling, delam engine "zvrchu", takze tohle snad nebude potreba |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 25. květen 2009, 13:28:48 Předmět: |
|
|
Muzes to rozkouskovat treba takto:
(0 je dole, 10 nahore) (popisuju ten obrazek s mostem)
0 - podlaha (trava)
1 - skala a zebrik, predmety lezici na zemi
2 - postavicka, kdyz je dole
3 - horni podlaha (trava) a most
4 - predmety lezici nahore
5 - postavicka, kdyz je nahore (treba na moste)
No a pokud postavicka leze po zebriku nahoru, tak si zmeni cislo vrstvy z 2 na 5.
Tady jsme rozkouskovali ten utes na dva objekty s ruznym Z (1 (skala) a 3 (trava nahore)). Jde to delat i bez kouskovani, jen je to o hodne slozitejsi a hodi se to spise, kdyz mas to plynule Z, ne vrstvy. _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 25. květen 2009, 13:33:32 Předmět: |
|
|
no nechci tam mít tolik layeru kdyz by vetsina z nich mela vsude nuly, ale ok tohle se doufam vyresi tim ze tam pridam vic tech rovin
jeste k tomu rozkouskovavani, takze je normalni ze kazdej sprite musim rozkouskovat treba az na 6 čtverečků? |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 25. květen 2009, 13:35:52 Předmět: |
|
|
no nechci tam mít tolik layeru kdyz by vetsina z nich mela vsude nuly, ale ok tohle se doufam vyresi tim ze tam pridam vic tech rovin
jeste k tomu rozkouskovavani, myslel sem to takhle když ten panáček stojí o jedno políčko pod mostem (tzn jeho nohy nejsou pod mostem, ale jeho hlava ano)
tak musím udělat to že ten sprite rozkouskuju (podle toho jak stojí na tilech) až na 6 čtverečků, a každej ten čtvereček vykreslím v určité hloubce podle toho kterýmu tilu odpovída, je tohle normální postup?  |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 25. květen 2009, 13:35:56 Předmět: |
|
|
Jen tenhle postup stale nefunguje treba pro male kameny na podlaze, ktere maji zakryt postavicku. Chces resit i tohle? Asi nejjednodussi je mit objekty ve stejne vrstve a setridit je podle smeru te ortogonalni projekce. Tedy pokud jsem pod kamenem, kreslim se prvni. Pokud jsem nad kamenem, kresli se prvni ten kamen. _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 25. květen 2009, 13:36:16 Předmět: |
|
|
(double post)
Naposledy upravil Sosarian dne 25. květen 2009, 13:37:59, celkově upraveno 1 krát |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 25. květen 2009, 13:37:12 Předmět: |
|
|
Navrhuju do 2D tile enginu pridat jeste cislo patra, ve kterem se panacek nachazi (jednou je prece na moste a jednou pod nim), a pak mit vrstvy okolo tech pater. V tve hre by tedy byla 2 patra a 3 vrstvy (uplne dole, mezi obema vrstvami, uplne nahore; prechody pres specialni policka, napr. schody, kde z jedne strany vstupuje do jednoho a z druhe strany do druheho patra). V jedne me bohuzel nedokoncene hre bylo jen 1 patro, takze jsem tam mel jen 2 vrstvy (uplne dole a uplne nahore), ale jak vidis na screenshotu nize, grafikovi/level-designerovi to nebranilo navodit dojem, ze tech vrstev umi engine vice (viz 3 opticke vrstvy vlevo dole):
 _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 25. květen 2009, 13:43:09 Předmět: |
|
|
Nee panacka rozhodne nekouskuj, kresli ho celeho najednou, tak jak jsem psal. Kouskovat muzes jen velkou geometrii, ktera se nehybe a kterou nakouskujes rucne v editoru.
A ted k vrstvam a samym nulam: Ty nepotrebujes mit pro kazdou vrstvu mrizku. Staci ti treba jen dve mrisky (jedna pro spodni a jedna pro horni patro) (ale klidne by ti stacila i jedna mrizka nebo dokonce zadna a pro vyhledavani pouzivas treba quadtree). Co potrebujes je mit u objektu promennou, ktera bude rikat, do jake vrstvy objekt patri. Taky potrebujes, pokud zustanes u mrizky: 1) Umoznit aby v jedne bunce mohlo byt vice objektu, 2) aby 1 objekt mohl byt ve vice bunkach (treba kdyz je veliky nebo kdyz prechazi mezi tily). Samotne objekty dodatecne nekouskujes.
Edit resume: Mrizka slouzi pro organizaci objektu. Vrstva pro viditelnostni usporadani. Pocet mrizek (pater) se nerovna poctu vrstev. _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 25. květen 2009, 13:53:44 Předmět: |
|
|
Sosarian napsal: |
2MD: nechápu, můžeš to nějak přeformulovat? když stojím na stejné y souradnici jako kámen a chci aby ten kámen byl nademnou (ten kamen je v druhym layeru) tak... to nevim jak resit
|
Pokud mas stejne Y jako kamen, tak bud muzes nad kamenem letat (nebo stat nad kamenem na moste), to bys ale byl v jine vrstve, tedy by se to vykreslilo spravne.
Pokud bys byl ve stejne vrstve, tak to znamena, ze mas stejnou vysku jako kamen, pak ale nesmis stat na stejne Y souradnici! To bys totiz stal uvnitr kamene, v kolizi! Takze to ti hra nedovoli.
Pokus jses s kamenem ve stejne vrstve a tve Y je mirne nizsi, tak jses pred kamenem a vykreslujes se prvi, kdyz je tve Y mirne vetsi, tak opacne. _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 25. květen 2009, 13:59:57 Předmět: |
|
|
Sorry, zase to pisu zmatene "jses pred kamenem -> vykreslujes se prvni" Je jasne ze jsem to napsal opacne. Prvni se musi vykreslit kamen, pak ja, abych ho zakryl  _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 25. květen 2009, 14:02:31 Předmět: |
|
|
ja hrace nemam ve vrstvě, nebo co bereš jako vrstvu
http://grim.havoc.sweb.cz/viditelnost.png
ten panáček vpravo je ten problém kterej popisujes? jakože tohle se stane protože panáček může stát za "špičkou" kamene, která je položená ve vrstve 1, ale zároveň může stát na kytce která je taky položená ve vrstve 1 (jinými slovy, nemám tušení jak tohle řešit
edit: myslim ze reseni je pridat dalsi vrstvu
0- veci pod tebou
1- veci ktere sou pod tebou nebo nad tebou kdyz mas vetsi nebo mensi y, ale kdyz mas stejne tak sou pod tebou
2- to stejné, ale kdyz mas stejne y tak sou nad tebou
3- veci nad tebou
edit:edit: myslim ze nad tim budu radsi jeste premyslet
no ale ten obrázek sem kreslil kvuli tomu panáčkovy vlevo, jak můžu poznat že ho mám kreslit pod čímkoliv když nevím že má pod něčím hlavu
(teď mě teda asi došlo co si říkal, mám to udělat tak že věci v první rovině vykreslím třeba na 0.1y (kde y je souradnice y), a věci v druhé rovine na 0.2x)
a panáčka pak obdobně na 0.ry (kde r je rovina a y je souradnice y) |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 25. květen 2009, 14:09:41 Předmět: |
|
|
Jeste k tomu usporadani. Rozhodni se podle toho, jak bude vypadat tva geometrie.
- Pokud pujde spise o 2D, jen obcas bude nekde most, tak bych vse umistil do jedne jedine mrizky (vsechny patra, vrstvy)
- Pokud pujde spise o 3D, budou tam vicepatrove budovy jako v UFU, tak bych pro kazde patro pouzil vlastni mrizku. (Ale i tak ma kazde patro vice vrstev)
Neboj se, ze by ti to slouceni zeslozitilo vyhledavani a kolize. Ty uz mas slozite i tak tim, ze dovolujes plynule prechazet mezi polickama, mas objekty ruznych velikosti a dovolujes jich mit na policku neomezene.
EDIT, ten navrh na pouze jednu mrizku ber jen jako navrh, ted kdyz nad tim premyslim, tak to mozna neni uplne nejprehlednejsi cesta ... _________________ - play with objects - www.krkal.org -
Naposledy upravil MD dne 25. květen 2009, 14:32:03, celkově upraveno 2 krát |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 25. květen 2009, 14:18:35 Předmět: |
|
|
JJ, presne: Panacek vpravo, kdy spicka kamene zakryva panacka. To je ten problem. Popremyslej o tom.
Zarad panacka taky do vrsvy, premysleni ti pak pujde lip
A pak uz staci pouzit jednoducha pravidla:
1) Kdyz A a B jsou v ruznych vrstvach, tak je to jednoduche, setridi se pouze podle poradi vrstev.
2) Kdyz A a B jsou ve stejne vrstve:
2a) Pokud se jejich obrazky neprekryvaji - neni co resit
2b) Setrid pomoci Y (Kdyz A.Y <= B.Y, tak se B kresli prvni)
A jeste pouzijes kolize, abys nemohl vejit primo doprostred kamene. Tam by totiz vypadalo hnusne, kdyz bys tim kamenem prosel a nejednou bys problikl pod nej. _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
|