Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Lorin
Založen: 18. 07. 2012 Příspěvky: 16
|
Zaslal: 31. březen 2013, 17:27:18 Předmět: Návrh architektury programu |
|
|
Dobré odpoledne. Momentálně dělám na jednoduché RPG hře. S návrhem hry jako takové by problém nebyl. Nápadů (byť třeba šílených) by bylo dost . Problém mám s vytvořením struktury aplikace. Jde mi o to, že některé třídy mají mít možnost přistupovat k jiným třídám. Například třída okna by měla být veřejně dostupná, aby do ní bylo možné vykreslovat.
Na netu jsem našel několik možností, jak vyřešit globální viditelnost. Popravdě nevím, který z nich mám vybrat. Každý má vlastní plusy a mínusy. Rád bych od vás slyšel, jak podobný problém řešíte. Jestli některou z popsaných metod, nebo nějakým vlastním "super řešením".
1) Použití globálních proměnných. Jednak nejde o doporučovaný postup a ani mě se příliš nelíbí.
2) Předávání potřebné třídy jako parametr. Mnohem lepší možnost než ta první. Bohužel se mi nelíbí nutnost předávání třeba tří, čtyř tříd plus dalších parametrů.
3) Vytvoření jedné třídy, která obsahuje další dílčí. V podstatě jde o stejný postup jako v druhém případě, jen není nutné předávat tolik tříd. Stačí předat jednu.
Jako příklad můžu uvést třeba třídu okna a správce událostí. Pokud správce událostí zaznamená ukončení aplikace, mělo by se zavřít okno. |
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 31. březen 2013, 19:30:49 Předmět: Re: Návrh architektury programu |
|
|
Zkus signály. |
|
Návrat nahoru |
|
 |
Jakub Doucek
Založen: 08. 12. 2011 Příspěvky: 14 Bydliště: Pardubice
|
Zaslal: 31. březen 2013, 19:41:09 Předmět: |
|
|
Na tvou otázku asi neexistuje tak konkrétní odpověď jak by sis představoval. Na konkrétní problémy je třeba hledat konkrétní řešení. Být tebou prostudoval bych si základy OOP, určitě se podívej alespoň na základní návrhové vzory a dobrá věc je určitě podívat se na nějaké již hotové herní enginy. Existuje i pár celkem dobrých knížek přímo o tvorbě herního enginu.
Pokud ti jde ovšem spíš vymýšlení her, než jejich programování a baví tě to, tak bych se věnoval tomu. Než budeš schopen naprogramovat "od nuly" hru, kterou by sis přál, tak to bez nadsázky může trvat i několik let. Buď bych doporučil použít nějaký již hotový engine a nebo i něco ve stylu GameMaker či Construct. |
|
Návrat nahoru |
|
 |
Lorin
Založen: 18. 07. 2012 Příspěvky: 16
|
Zaslal: 31. březen 2013, 20:10:22 Předmět: |
|
|
citace: |
Existuje i pár celkem dobrých knížek přímo o tvorbě herního enginu. |
Mohl byste prosím uvést nějaké příklady?
citace: |
Pokud ti jde ovšem spíš vymýšlení her, než jejich programování a baví tě to, tak bych se věnoval tomu. |
Baví mě jak vymýšlení, tak programování. MMF, Game Maker a RPG Maker jsem zkoušel. Vždy mi přišlo, že jsem neměl dostatečně "volnou ruku". Proto jsem se rozhodl, že si naprogramuju hru od nuly. Miluju ten pocit, když něco napíšu a ono to funguje jak má. Obzvlášť když mi to trvá nějaký čas ladění.
citace: |
dobrá věc je určitě podívat se na nějaké již hotové herní enginy |
To jsem zkoušel, bohužel jsem neměl štěstí na nějaký rozumně velký engine. U těch velkých je trochu problém vysledovat, co s čím a jak souvisí.
Jde o nějakou "obrzličku" nebo je to toto?
Zkusím uvést hlavní problém, který teď řeším. Mám několik tříd - Window, Audio, GameState a Settings. Window ovládá okno, Audio přehrává hudbu a zvuky, GameState spravuje jednotlivé herní části hry a Settings je třída obsluhující čtení a zápis do konfiguračních souborů.
Napadlo mě vytvořit třídu, která by obsahovala ukazatel na jedináčky dříve popsaných tříd.
Jednotlivé ukazatele bych dal jako public, takže by se k nim přistupovalo pomocí HlavniTrida->window->nějakámetoda().
Na druhou stranu si říkám, že jde asi o špatný návrh. Rozhodně se kouknu po nějakých knížkách nebo tutoriálech popisujících návrh aplikační architektury. |
|
Návrat nahoru |
|
 |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 31. březen 2013, 20:50:18 Předmět: |
|
|
me se osvedcilo nevytvaret zadne stavove tridy (kod hry mam temer jen c bez ++) a delat jen naproste minimum funkci se sideefekty. Data prakticky vzdy transformovat do nove podoby a nemenit je inplace (tj. temer vsechny data jsou immutable). Ve vysledku to znamena ze na hru se divam jako na inkrementalni vyrobu dat kdy se stara data transformuji do novych.
Naposledy upravil quas4 dne 31. březen 2013, 23:22:05, celkově upraveno 1 krát |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
|
Návrat nahoru |
|
 |
Jakub Doucek
Založen: 08. 12. 2011 Příspěvky: 14 Bydliště: Pardubice
|
Zaslal: 1. duben 2013, 18:39:29 Předmět: |
|
|
Lorin napsal: |
citace: |
Existuje i pár celkem dobrých knížek přímo o tvorbě herního enginu. |
Mohl byste prosím uvést nějaké příklady?
|
http://www.amazon.com/Game-Engine-Architecture-Engineering-Applications/dp/012229064X - Není špatné
http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135 -Tato mi přijde vesměs sqělá Určitě doporučuji přečíst.
citace: |
citace: |
dobrá věc je určitě podívat se na nějaké již hotové herní enginy |
To jsem zkoušel, bohužel jsem neměl štěstí na nějaký rozumně velký engine. U těch velkých je trochu problém vysledovat, co s čím a jak souvisí.
|
Tento by možná stál za shlídnutí pokud neznáš:
http://code.google.com/p/angel-engine/
Problém, který řešíš je například v XNA řešen tak, že se všude předává odkaz na Game, což je jakási hlavní třída zastřešující vše.
Já osobně používám ve svém enginu Entity/component architekturu a třídu Game předávám entitám ale jednotlivé komponenty už si z ní vytáhnou jen co potřebují. |
|
Návrat nahoru |
|
 |
|