Toto je starší verze dokumentu!


theBigOne

(toto je pouze pracovní název!)

Stránka o 2D (side-view) strategii ve vývoji…

Akce

snažil jsem se vymyslet nějaký univerzální systém, abych neskončil s tím, že budu pro každou schopnost psát zvlášť zdroják až jsem se rozhodl každou činnost rozložit na minimální opakující se části, které bude možno znovupoužívat

Ukázka (vnitřního aka programového) průběhu střelby

zkusím nějak popsat proces označení střelce k útoku na někoho:

  1. nejdříve klikneš na střelce, to vyvolá odezvu v Inputu, který pošle informace o tomto kliku do fronty zpracování v akcích
  2. v momentě kdy na to v akcích přijde řada (pokud by běželi ve vlastním vlákně bylo by to asi best) tak se vezme vždy input z předku fronty (pro jednoduchost se zrovna vezme ten tvůj klik) a předhodí se mechanismu, který info o tom kliku porovná s podmínkama (pozice) všech akcí čekajících na kliknutí (každý objekt na který se dá kliknout by měl mít v seznamu „klikatelných“ akcí zaregistrovanou tu svojí, aby se o něm vědělo, tady zvláště při tom vyhledávání to nejspíš bude chtít nějak zefektivnit, aby se pokaždé neprohledávali všechny, už na to mám pár myšlenek, ale ty půjdou přidat časem)
  3. když se najde tato akce, tak se spustí (kliknutí v danném prostoru bylo trigger, takže se přistoupí k vyhodnocení vlastní akce), což v tomhle případě znamená asi vyřazení této akce ze seznamu kliků a přidání do fronty akcí k provedení (což by mělo probíhat v nekonečném cyklu)
  4. když dojde řada na provedení akce, tak se uskuteční co bylo nastaveno při jejím vytvoření.. v tomhle případě si tato akce vytvoří několik podřízených akcí (některé z nich budou okamžité a tak se zařadí do fronty na provádění, některé budou „čekání na kliknutí“ a ty se zařadí do své fronty, etc..) výsledkem čehož se vojáček na kterého bylo klinuto ve hře zvýrazní, zobrazí se v intefacu „jeho“ menu staty a třeba něco řekne… ( navíc se někde nastaví, že tento vojáček je označený a tak aby to bylo při dalším vyhodnocování kliku bráno v potaz)
  5. teď si nejsem jistý jak přesně bude udělaná vazba mezi akcema, ale výsledkem by mělo být, že když je označený střelec a provede se další klik (označení cíle útoku) a vyhodnotí se jako použitelný, akce, která čekala na zadání útoku vygeneruje další sadu akcí, jako např. vytvoření nového objektu (šíp, tento objekt si pak sám vygeneruje akce na načtení vlastních parametrů a obrázku, tyhle loadovací akce by měli mít nějakou prioritu před ostatními, aby byly všechny objekty inicializované), udání počáteční rychlosti a vlastníka tomuto šípu (možná už při vytváření), spuštění akce časovače (s časovým triggerem), která po uplynutí daného časového limitu vyhodnotí nový úhel k útoku a vypustí další šíp etc…

Poznámky

  • ten systém akcí je docela komplikovaný na první pohled, ale pokud by se nakonfiguroval správně, tak by potom vytvářet vlastní obsah hry neměl být problém, ať si vymyslíš vpodstatě jakoukoliv schopnost, jednotku, budovu… a přitom typů akcí by mělo být minimum. Jenom se někde musí zaznamenávat co který objekt umí, ve smyslu, že když vybereš střelce, jaké má tato akce mít následky (jaké má vyvolat další), někde se bude muset šáhnout do repozitáře, zjistí se, co má dělat akce označení střelce a to se provede…
  • pak už to bude jen o tom navrhnout posloupnost akcí, která má nastat při střelbě, dopadu šípu, kouzlení ohně, vytvoření jednotky, ale třeba i při zapnutí hry (načtení prototypů jednotek tvojí rasy, vytvoření hlanvího interface, načtení mapy) … prostě všecko (až na terén s kterým ještě nevím jak :D, ale nejspíš jako speciální objekt, aby na něj šli aplikovat triggery kolize,… jo a taky fyzika, ale to kvůli zjednodušení, ne že by to nešlo…) půjde implementovat jen přes vytváření těhlech skriptů, které pak budou asi přiloženy k exáči ve vlastních, možná lechce kódovaném (aby si někdo kdo nemá dostatečné znalosti kódu nemohl zjednodušit život, přece jen bych to chtěl mít jako opensource), souboru..
  • typy triggerů akcí mám 4 (čas, kolize, input, okamžité) a vlastních typů akcí asi 7 a to úprava/vytvoření/zručení objektu (dle definovaného prototypu, nebo dle výsledku nějakých předchozích akcí, např. ubírání životů), akce, která spustí sadu dalších akcí (1-X, např. to vypuštění šípu, označení střelce) a změna kontextu (lokální a globální) což vpodstatě znamená vytváření/rušení/úpravu „cizích“ akcí (pro případy, kdy je třeba pauznout hru, nebo ji ukončit, atd…)

Fyzika

Protože se jedná o 2D hru, vyděnou z boku, rád bych implemetoval základní zákony fyziky pohybu. Výsledkem čehož by měli projektily létat po víceméně reálných drahách a kameny věží se řítit k zemi hezky efektně a třeba i někoho tím zranit, atd…

Řešení v kódu

Původně jsem plánoval, aby i fyzika byla řešená systémem akcí, ale to už by tam bylo opravdu narváno a pro tenhle konkrétní problém je to až trochu zbytečné zesložiťování. U každého pohybu schopného objektu (!!je třeba nějak zjednodušit vyhledávání v seznamu) známe jeho pozici(a úhel natočení) a případnou konkrétní rychlost (i když to některé principy kvantové fyziky vylučují :D ) a díky tomu můžeme v nekonečné smyčce pravidelně (v závislosti na čase) tuto polohu aktualizovat.

Poznámky

Je třeba prozkoumat možnosti metadat kolizí v clanLibu, jestli bude možné aplikovat i věci jako těžiště, dopad na roh, atp…

Rozvržení výpočtového času

Pravděpodobně bude nejlepší, z důvodů přehlednosti a optimalizace, už ze začátku zavést vlákna a to jedno pro každé následující:

  • hlavní thread (zahajující a ukončující) ??
  • provádění akcí
  • obsluja Vstupu
  • kontrola input vs triggery (včetně timerů, nebo i ty zvlášť?)
  • fyzika
  • AI?
thebigone.1284141377.txt.gz · Poslední úprava: 2010/09/10 19:56 autor: estaf
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0