.[ ČeskéHry.cz ].
Návrh herního enginu

 
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
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 18. květen 2009, 19:44:26    Předmět: Návrh herního enginu Odpovědět s citátem

Zdravím ve spolek,

Četl jsem ten topic níže viz:
http://www.ceske-hry.cz/forum/viewtopic.php?t=1480

A jak jsem pochopil tak single ton je velké zlo Smile i když jsem četl články kde to vyvracejí.

Zajímalo by mě jestli je tento návrh enginu hodně špatný:

citace:
Jeden globální záznam "TCoreInfo" který obsahuje všechny proměnné které budou potřebovat ostatní třídy:

D3D zařízení, DirectSound, poslední zprávu windows, pozici myši, stav klávesnice, informace o rozlišení herní obrazovky, třídu pro renderování grafiky, fontů, nějaký ten manažer zdrojů apod.

-Hlavní třída TGame, Vstupní parametr TCoreInfo:
*Inicializace všech potřebných, vytvoření okna, zařízení apod.
*Vytvoření potřebných tříd
*Kopírování všech informací do záznamu TCoreInfo

-Třída TWorld, je vytvořena v třídě TGame, Vstupní parametr TCoreInfo:
*Načtení mapy, hýbání objekty apod.

Všechny ty třídy mají v kontruktoru ukazatel na globální proměnnou TCoreInfo, a všechny existují jen jednou, ukazaten na jejich instanci je uložen v tom záznamu TCoreInfo.

Takže třeba třída TFontLoader, Vstupní parametr do kontruktoru TCoreInfo. Tato třída má metodu:

LoadFontFromFile(FileName, Font) kde Font je je záznam.


A takhle to řeším všude, jedna globální instance třídy (uložena v TCoreInfo) která pracuje nad záznamem.

Zajímalo by mě jestli je tento přístup opravdu tak špatný a taky by mě zajímalo jak předáváte potřebné informace jiným třídám, třeba máte interface ID3DDevice9 který vytvoříte v grafickém enginu, ten třeba budete potřebavat i jinde, pro vytvoření textůry při načítání objektů apod.

Co jsem viděl zdrojové kódy tak jsem viděl jen globální proměnné, právě třeba pro interface ID3DDevice9, instance tříd pak přistupovali k těmto globálním proměnným, takže o nějaké zapozdřenosti není ani náznak.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
MD



Založen: 29. 07. 2007
Příspěvky: 437
Bydliště: Praha

PříspěvekZaslal: 19. květen 2009, 08:28:40    Předmět: Odpovědět s citátem

Tak jsem si myslel, ze debat na tema singleton je toto forum plne (sam jsem do nich prispival), tak ze zkusim neco najit. A ono houby, naslo mi to jen 2.

Takze jdem na dalsi! Razz

Ano singleton je zlo, zvlaste v tak velkem rozsahu, jak to navrhujes ty.
Singleton se hodi pro objekty, u kterych jsi si 100% jisty, ze vzdy (i za 3 roky vyvoje) budes od nich potrebovat prave tu jednu instanci. Rekneme, ze singleton by mohl byt objekt klavesnice. To by mohlo fungovat, ta je jen jedna. Takze naprogramujes tenhle objekt a pak na spouste mistech (500+) sveho enginu budes s klavesnici pracovat. Jenze pak zjistis, ze k pocitaci se da pripojit klavesnic nekolik a ty se rozhodnes, ze kazdy hrac si bude svou postavicku ovladat svou klavesnici. Najednou potrebujes vice instanci a musis projit vsech tech 500+ mist a opravit je.

Tohle byl jen jeden umely priklad. Je schvalne voleny tak, ze na zacatku to vypada, ze navrh je ok, ale pak se to zvrtne. Tohle se prave stava u singletonu casto. Ja napriklad mel jako singleton jadro hry, ktere ridi beh hernich objektu (runtime). Jenze pak jsem zjistil, ze budu potrebovat abych umel soucasne spustit vice her (1 v editoru, 1 jako test, 1 jako main menu, 1 jako vlastni level, 1 jako mezihru.. a vse najednou), takze jsem to musel prepsat (1000+ mist!!)

O tom jestli je vhodne mit jako singleton DirectX Device Manager, File System (treba ja FS jako singleton mam) se da jeste uvazovat.
Ale nedoporucuju mit jako singleton Hru nebo Herni svet.

Taky pozor u singletonu, pokud programujes multithreadove. Pak pri pristupu k nim musis implementovat synchronizaci.
_________________
- play with objects - www.krkal.org -
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
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
Strana 1 z 1

 
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