Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Yandy
Založen: 25. 10. 2010 Příspěvky: 8
|
Zaslal: 17. listopad 2010, 23:30:42 Předmět: Chození v osmi směrech |
|
|
Ahoj, narazil jsem na problém, tak ho házím sem mezi chytré hlavy, snad mi s ním někdo poradí.
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 |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 18. listopad 2010, 01:05:48 Předmět: |
|
|
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 |
|
|
gindar
Založen: 05. 10. 2007 Příspěvky: 86
|
Zaslal: 18. listopad 2010, 01:19:21 Předmět: |
|
|
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 |
|
|
Yandy
Založen: 25. 10. 2010 Příspěvky: 8
|
Zaslal: 18. listopad 2010, 10:05:08 Předmět: |
|
|
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 |
|
|
gindar
Založen: 05. 10. 2007 Příspěvky: 86
|
Zaslal: 18. listopad 2010, 10:17:01 Předmět: |
|
|
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 |
|
|
Yandy
Založen: 25. 10. 2010 Příspěvky: 8
|
Zaslal: 18. listopad 2010, 10:25:28 Předmět: |
|
|
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 |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 18. listopad 2010, 10:39:00 Předmět: |
|
|
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 ) 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 |
|
|
Al
Založen: 23. 10. 2007 Příspěvky: 196
|
Zaslal: 20. listopad 2010, 00:15:46 Předmět: |
|
|
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. ) |
|
Návrat nahoru |
|
|
gindar
Založen: 05. 10. 2007 Příspěvky: 86
|
Zaslal: 20. listopad 2010, 01:55:32 Předmět: |
|
|
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 |
|
|
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 20. listopad 2010, 09:21:04 Předmět: |
|
|
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 |
|
|
franz
Založen: 30. 07. 2007 Příspěvky: 1325
|
Zaslal: 20. listopad 2010, 11:01:09 Předmět: Re: Chození v osmi směrech |
|
|
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
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 |
|
|
Al
Založen: 23. 10. 2007 Příspěvky: 196
|
Zaslal: 20. listopad 2010, 20:56:29 Předmět: |
|
|
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á... |
|
Návrat nahoru |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 20. listopad 2010, 21:53:52 Předmět: |
|
|
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 |
|
|
Al
Založen: 23. 10. 2007 Příspěvky: 196
|
Zaslal: 20. listopad 2010, 23:24:55 Předmět: |
|
|
Tak to MedievalDefense je s tím pohybem myslím kvalitativně daleko jinde, než kde je původní tazatel. |
|
Návrat nahoru |
|
|
Yandy
Založen: 25. 10. 2010 Příspěvky: 8
|
Zaslal: 24. listopad 2010, 07:19:15 Předmět: |
|
|
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 |
|
|
|