Upload
ira
View
45
Download
0
Embed Size (px)
DESCRIPTION
Po čítačové hry a animace. Cvi čení 3. Notová osnova. Content pipeline Úvod do logiky Trigger engine Skriptování Pathfinding a A*. Content Pipeline. Kompilace do assetu pomocí Content importerů Konverze do XNA nativních DOM pro content processor Content procesorů - PowerPoint PPT Presentation
Citation preview
Počítačové hry a animaceCvičení 3
Notová osnova
● Content pipeline● Úvod do logiky● Trigger engine● Skriptování● Pathfinding a A*
(3)
Content Pipeline
Kompilace do assetu pomocí– Content importerů
• Konverze do XNA nativních DOM pro content processor
– Content procesorů• Zkompiluje do managed code objectu k přímému použití v XNA
(4)
Content Pipeline II
Importéry pro 3D modely– Autodesk .FBX
– DirectX .X
Export FBX– Maya – Nutno zapnout v pluginech
– Max – Přímo
Export X– http://www.kwxport.org/ pro Max
(5)
Custom Content Importer
Můžeme si napsat vlastní
– Namespace• Microsoft.Xna.Framework.Content.Pipeline
Content Pipeline Extension Library Přetížit fci Import MeshBuilder
– Pomocná třída pro načtení a uložení jednoho meshe
Custom Model Importer sample na create.msdn.com
http://create.msdn.com/en-US/education/catalog/sample/custom_model_importer
Co je herní logika
● Kolektivní název pro spoustu věcí● Obecně, systém který rozhoduje co herní objekty
dělají● Mnoho možných způsobů implementace
Logické vazby
● Když se něco stane, hra nějak zareaguje● Když hráč stiskne páku X, otevřou se dveře Y● Když nepřítel A uvidí hráče, začne dělat B● Když uplyne nějaká doba, stane se X
● Vazby chceme:● Konfigurovatelné● Rozumně flexibilní● Co možná výpočetně nenáročné
Trigger engine
● Explicitní implementace systému logických vazeb
● Je definována sada triggerů, které lze emitovat● Objekty se registrují jako posluchačí triggerů● Emitovaný trigger se předá posluchačům ke
zpracování
Co může být trigger?
● Konkrétní input od hráče● Interakce s herním objektem● Změna ve vyznačené lokaci● Akce způsobující zvuk● Uplynutí určité doby (časový trigger)● Kolize mezi určitými objekty● Jiná změna herního stavu
Anatomie trigger enginu
● Každý typ triggeru reprezentován třídou/strukturou
● Pro každý typ seznam zaregistrovaných posluchačů
● Posluchači se registrují a odregistrují● Emitovaný trigger je distribuován mezi všechny
posluchače● Vložit trigger může kdokoliv zvenčí
Posluchači a synchronizace
● Dědí interface podle typu a exponují funkci na zpracování
● Každý drží dvě fronty na triggery● Na začátku update cyklu switch● Triggery se zpracovávají během update
posluchače, ne hned při přijetí
Implementační detaily
● Posluchačem může být:● Přímo herní objekt● Skriptový objekt
● Je vhodné, aby trigger engine sám implementoval časové triggery
Skriptování
● Součástí popisu herní úrovně může být skript● Lze v jakémkoliv skriptovacím jazyce který umíme
interpretovat
● Skript se obecně spouští ve dvou fázích:● 1. Inicializace – může umisťovat herní objekty,
vypisovat brífing a především registrovat posluchače
● 2. Runtime – kusy skriptu zaregistrované jako posluchači v reakci na události
Skriptovací engine
● V zásadě pouze interpret daného jazyka● Je třeba mu umožnit:
● Nahlížet na stav hry a měnit jej● Zjišťovat a upravovat stavy herních objektů● Registrovat posluchače a být posluchačem● Ukončit hru● Komunikovat s hráčem
Skriptovací engine – příklad
● http://jint.codeplex.com● Pro C# ECMAScript interpret JINT● Instance třídy JintEngine obsahuje kontext● Metoda SetParameter definuje proměnnou● SetFunction definuje delegáta jako ES funkci● CallFunction explicitně volá ES funkce
Skriptovací engine – závěr
● Logiku lze řešit jak v herním kódu, tak ve skriptech
● Je třeba zvážit tradeoff● Vyberte si svůj oblíbený skriptovací jazyk a
interpret a vesele skriptujte!● http://boo.codehaus.org/● LuaInterface
Triggery/Skripty - implementace Triggery
Delegát public delegate void MyEventHandler(object sender, object args);
Interface public interface ITriggered { void Fire(object sender, object args); }
Skripty Reflection
PropertyInfo pi = obj.GetType().GetField(„mVar“);pi.SetValue(obj,val,null);
Stejné jako
obj.mVar = val;
Design patterns Když po nich toužíte, tak si přečtěte Gang of Four ...
Code: Triggery
Delegáti - delegate retval Name( params, … );
– public delegate void MyDelegate();– MyDelegate del = new MyDelegate( MyFunction );– del();
ArrayList – dynamické pole• Add();• foreach(element E in ArrayList) { }
Trigger má mít– Delegáty pro kontrolní fce– Delegáta pro vykonávací funkci– Funkci pro kontrolu v každém updatu
• Zkontroluje kontrolní fcePokud všechny true, tak pustí vykonávací fci
Pathfinding
● „Herní AI je pathfinding“● V některých hrách nejviditelnější část AI● Za splnění určitých předpokladů teoreticky
vyřešený problém
Definice problému
● Vím, kde jsem● Vím, kam se chci dostat● Vím, kam bezprostředně můžu● Vím, kolik co stojí● Chci najít nejlevnější cestu z A do B
Definice problému
● Pozice a její změna mohou mít různé významy● Lze zohlednit mnohem víc informací● Možné aplikace později
Algoritmus A*
● Řeší problém pathfindingu● Pomáhá si heuristikou
● Heuristika = odhad jak daleko je cíl z daného stavu
● Pokud existuje výsledek, vždy nalezne ten optimální pokud je heuristika přípustná – tj. Může odhad podhodnotit, ale nikdy ne nadhodnotit
● Přesnější odhad → kratší runtime
Aktualitka
http://www.ai-class.com/ "Introduction to Artificial Intelligence" October 10th to December 18th 2011
A* Engine
● Herní komponenta (ke stažení), která polymorfně řeší pathfinding
● Děděním z AStarJob a AStarNode lze v jednom enginu najednou zpracovávat různé typy úloh
● Každé kolo provede nanejvýš zadaný počet výpočetních kroků
A* engine
● AStarJob:● Musí umět vrátit prioritu (cykly se jobům rozdělují v
poměru priorit)● Musí umět vrátit startovní stav● Voliteně inicializace, finalizace● Má stav – uninitialized, working (počítá), finished
(cesta nalezena), failed (cesta nenalezena)● Na konci je v goal cílový uzel, přes předky dojdeme
nejkratší cestou k počátku
A* engine
● AStarNode● Reprezentuje stav ve stavovém prostoru● Neměl by se duplikovat● Musí umět:
– Vrátit všechny dostupné sousedy– Spočítat si svou heuristiku– Vrátit vzdálenost k danému sousedovi– Ohlásit se, pokud je cílový
Příklady úloh
● Stavy jsou body v prostoru● Přístupné jsou stavy do určité vzdálenosti● Nejkratší cesta euklidovsky● Heuristika: vzdálenost rovnou čarou k cíli● Implementováno jako příklad
Příklady úloh
● Váhovaná pravidelná mřížka● Cena průchodu závisí na typu pole a
vlastnostech cestujícího● Heuristika: přímá vzdálenost best-case rychlostí
Příklady úloh
● Navigace ve spojitém interiéru● Navigation mesh● Rozdělení prostoru, pohyb mezi startem a cílem
nebo těsně kolem překážek● Použito v UE3● Heuristika: vzdálenost přímou čarou
Příklady úloh
● Lze kromě pozice uvážit i orientaci či rychlost● Cenou je čas● Heuristika: ???