.[ ČeskéHry.cz ].
Chození v osmi směrech
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Yandy



Založen: 25. 10. 2010
Příspěvky: 8

PříspěvekZaslal: 17. listopad 2010, 23:30:42    Předmět: Chození v osmi směrech Odpovědět s citátem

Ahoj, narazil jsem na problém, tak ho házím sem mezi chytré hlavy, snad mi s ním někdo poradí. Rolling Eyes

Věc se má tak, že hledám možnost, jak udělat smysluplný pohyb do osmi směrů na čtvercové mřížce. Pokud by například procházela postava společným bodem úhlopříčných čtverců (prostě přes roh, např. úhel 45°), bylo by komplikované uhlídat, jestli zároveň jeden ze dvou čtverců, které mají tento roh také společný (čtverec napravo nebo nahoře od původního), není obsazen například nějakou budovou. Postava by pak procházela vlastně rohem budovy, což není ideální. Vyřešit tento problém nějakou křivkou mi taky moc nejde, protože cestování podél úhlopříčné stěny by vypadalo jako po flámu - velice křivé a houpavé.

Přijal bych i řešení s jinou mřížkou než čtvercovou, opravdu jsem ale nevymyslel, jak by to mohlo fungovat. Hledání cest pomocí navigation mesh jsem po dlouhé práci zavrhl, protože je to plné výpočtů na které nemám čas ani energii - chci se věnovat jiným aspektům hry než jen tomuto.

Hra by měla vypadat tak, že bude plná NPC, které budou žít vlastním životem. Měla by být založena na umělé inteligenci. Potřebuji tedy pevný podklad pro chození.

Uvítám tedy jakékoli vaše návrhy a postřehy. Beru cokoli, co by mi mohlo pomoct nebo mě nasměrovat.

Předem moc děkuji za jakýkoli příspěvek.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1536
Bydliště: u Prahy

PříspěvekZaslal: 18. listopad 2010, 01:05:48    Předmět: Odpovědět s citátem

Tohle bylo dobře už v UFO: Enemy Unknown z r. 1993 - když tam není překážka, jdi šikmo, když je, tak šikmo nemůže a nezbývá než ji obejít. Jen 1 if navíc.
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
gindar



Založen: 05. 10. 2007
Příspěvky: 86

PříspěvekZaslal: 18. listopad 2010, 01:19:21    Předmět: Odpovědět s citátem

Kdysi jsem to řešil takto: objekty ve hře měli definovanou vlastnost podle níž se poznalo zda blokuje průchod i přes její roh. Např.: budova = nelze projít; NPC = lze projít.

Druhou variantou, která řeší i to, že průchod diagonálně je vlastně delší, je použití hexů namísto čtverců.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Yandy



Založen: 25. 10. 2010
Příspěvky: 8

PříspěvekZaslal: 18. listopad 2010, 10:05:08    Předmět: Odpovědět s citátem

No co se týče toho testu překážky, pokud bych měl dejme tomu ulici, která je úhlopříčná a široká jako úhlopříčka jednoho čtverce, tedy co nejmenší, tak by čistě logicky měla postava, která není větší než ten jeden čtverec, projít, protože ta ulice prostě není menší než ona. Kdyby ale testovala překážky, tak zjistí, že jít nemůže, protože ty budovy zasahují úhlopříčně do každého druhého pole z obou stran a tedy jsou tato pole plná.

Myslím si, že by nastalo to samé i při definování těch předmětů jako takových jak zmínil gindar. A kdyby byla ve hře například řeka, měla by mít nějaké rohy průchozí a nějaké ne a nevím, jak by to měla postava poznat. Problém je v tom, že bych chtěl mít objekty umístěny i úhlopříčně, jinak by to bylo samozřejmě lehčí.

Co se týče hexagonů (jestli to chápu dobře, je to systém použitý ve hrách Fallout 1, 2), nedají mi pohyb do 8 směrů ale jen do 6. Dva ze směrů by tedy znamenaly kličkování.

Nejvíce zatím uvažuji o tom, že by se každý ze čtverců rozdělil úhlopříčkami na 4 trojúhelníky a postava by zjišťovala, jestli je daná polovina čtverce volná a pokud by byla, mohla by přes její roh projít. Nevím ale, jestli to není zbytečně komplikované a jestli se s tím nepodkopu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
gindar



Založen: 05. 10. 2007
Příspěvky: 86

PříspěvekZaslal: 18. listopad 2010, 10:17:01    Předmět: Odpovědět s citátem

Yandy napsal:
No co se týče toho testu překážky...


Jo to je pravda, chápu. Ale jestli se můžu zeptat, o jaký druh hry se jedná? Jestli je to vůbec třeba řešit.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Yandy



Založen: 25. 10. 2010
Příspěvky: 8

PříspěvekZaslal: 18. listopad 2010, 10:25:28    Předmět: Odpovědět s citátem

No mělo by to být ve výsledku RPG, s tím, že NPC ve městě žijí opravdu svým životem. Proto potřebuji nějaký kvalitní systém chůze. Jako nouzové řešení si nechávám pohyb do 4 směrů a víc nic, ale vůbec se mi to nelíbí. Chtěl bych to trochu hezčí.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 18. listopad 2010, 10:39:00    Předmět: Odpovědět s citátem

Yandy: ten systém co popisuje gindar (kdy se vyznačí, jestli se může projít úhlopříčně, nebo ne, a v tom případě se to obejde ortogonálně) jsem používal ve hrách typu tower defense (BecherCraft, MedivalDefense), a nebyl s tím problém. V závislosti na podkladové grafice nebo objektech si v designu levelu jen sám vybereš, jaký typ mapového políčka tam dáš.

A pokud chceš, aby to působilo celkově lépe, tak si dělej smoothing vypočítané path mapy (to jsem dělal v jedné adventuře (Prdel Světa Wink) a v prototypu time management hry z prostředí supermarketu, tam chodili prodavači a zákazníci), tj. projdeš postupně tiles cesty a ověříš viditelnost mezi nimi, a neblokující propojíš přímo. Samozřejmě pak můžeš mít zase problém s animací, ale pokud máš pěknou do 8 směrů, měla by v klidu pokrýt libovolný úhel
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Al



Založen: 23. 10. 2007
Příspěvky: 196

PříspěvekZaslal: 20. listopad 2010, 00:15:46    Předmět: Odpovědět s citátem

Jj, memův systém zní dobře.
_________________
Děcka, mám doktorát z informatiky a aplikované matematiky, tak se se mnou laskavě nehádejte.

(Každej tu má nějakej zaručeně tvrďáckej podpis, tak já teď taky. Very Happy)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
gindar



Založen: 05. 10. 2007
Příspěvky: 86

PříspěvekZaslal: 20. listopad 2010, 01:55:32    Předmět: Odpovědět s citátem

Já vím, že už jsem to psal a budu trochu otravný. Diagonální dráha je delší (1.41) a stejně se počítá jako "stejný" krok. Takže 1 postava udělá třeba za 10 sekund 10 kroků a urazí vzdálenost 10m, druhá jde diagonálně a urazí 14m/10s. Nevím jestli to někdo nějak někdy řešil (v tomto se mi zdají vhodné hexy).

edit: Po několika minutách mi došlo, že po pivu nesmím zapínat komp.
edit: Asi bych se na tento problém (1.41) vyprdnul.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Houp



Založen: 28. 07. 2007
Příspěvky: 672

PříspěvekZaslal: 20. listopad 2010, 09:21:04    Předmět: Odpovědět s citátem

gindar napsal:
Já vím, že už jsem to psal a budu trochu otravný. Diagonální dráha je delší (1.41) a stejně se počítá jako "stejný" krok.


Co myslíš tím "se počítá"? Já to počítal jako jiný krok, upravit vyhledávací algoritmus dle toho není problém. (spíš na hodnoty 10 a 14, než na 1.0 a 1.4)

A k dotazu. Když jsem sám dělal semestrálku na algoritmy vyhledávání cesty, tak tohle jsem řešil poměrně jednoduše. Každý čtvercový tile byl ohodnocen jako průchozí/neprůchozí, a tedy pokud se dělal diagonální pohyb, tak se jen kontrolovala příslušná sousední políčka, jestli tam není roh.

Ano, tohle samo o sobě neumožňuje mít diagonální "tunel" o šíři jednoho tilu. já bych takový problém třeba buď neřešil(nevytvářel takovou mapu - stejně, pokud by ses nakonec kvůli tomuhle rozhodl zůstat u čtyř směrů, tak tento problém tím nevyřešíš, takové "tunely" tam pak stejně nemůžeš mít), a nebo druhá varianta, bych si ty tily tunelů označil speciální značkou, že jsou to tunely = může hráč jít diagonálně, nemusí se koukat na ostatní tily.
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
franz



Založen: 30. 07. 2007
Příspěvky: 1325

PříspěvekZaslal: 20. listopad 2010, 11:01:09    Předmět: Re: Chození v osmi směrech Odpovědět s citátem

Yandy napsal:
...Postava by pak procházela vlastně rohem budovy...


Mrkni třeba na Warcraft1, tam to funguje přesně jak píšeš, s tím že grafika budov obsahuje kolem sebe trochu prostoru právě kvůli jejich obcházení, tj není kreslená přes celý čtverec Arrow
Kdyby chtěl katapult na horním obrázku přejet na čtverec doleva šikmo dolů, přejel by ve skutečnosti rohem budovy, ale díky šikovné grafice to tak nevypadá.



Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Al



Založen: 23. 10. 2007
Příspěvky: 196

PříspěvekZaslal: 20. listopad 2010, 20:56:29    Předmět: Odpovědět s citátem

franz: Dobrá poznámka. A tohle nehledejte v učebnicích, je potřeba hlavně přemýšlet. Komu je z hůry dáno, má v praxi ve vývoji dycky navrch bez ohledu na to, kolik programovacích jazyků už zná... Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 20. listopad 2010, 21:53:52    Předmět: Odpovědět s citátem

Třeba tady v MedievalDefense je krásně vidět, že se dá přes můstek přejít diagonálně (barevné tiles mají ještě trochu komplikovanější význam, ale pro ten pohyb kde jsou z obou stran žluté to znamená, že se tam dá projít. Podobně se dá projít rohem zelené, pokud je na druhé straně prázdno)


Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Al



Založen: 23. 10. 2007
Příspěvky: 196

PříspěvekZaslal: 20. listopad 2010, 23:24:55    Předmět: Odpovědět s citátem

Tak to MedievalDefense je s tím pohybem myslím kvalitativně daleko jinde, než kde je původní tazatel.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Yandy



Založen: 25. 10. 2010
Příspěvky: 8

PříspěvekZaslal: 24. listopad 2010, 07:19:15    Předmět: Odpovědět s citátem

Děkuji všem za přínosné příspěvky. Nakonec jsem ještě našel nějaké poznámky k navigation mesh a zkouším to přeci jenom s ním. Vše, co je zde rozebráno, se mi ale určitě ještě někdy bude hodit, a pokud ne mně, tak určitě mnoha jiným amatérským vývojářům s podobnými problémy.

Ještě jednou děkuji.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna