Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 21. březen 2008, 10:44:54 Předmět: Návrh hry |
|
|
kdyz delam neco jako engine nebo 3d hru, mel bych pouzivat
1) objekty pro věci jako je Engine
(i presto ze v cecku neni primo nic jako static class, i kdyz jdou vsechny veci vevnitr udelat jako static nebo pouzivat singletony (coz se me moc nelibi))
2) nejakym zpusobem bez objektu, dejmetomu s extern abych mel pristup ke vsemu vsude
2a) pojmenovavat veci napriklad Engine_Initialize() a pak vsechno davat extern
2b) pouzivat namespace a pak mit veci jako Engine::Initialize() a taky vse do externu
ten zpusob 2b se mi libi asi nejvic, i kdyz tim 2a je udelanej Q3 (ten je ale v c ne cpp) ty objekty se mi zdaji obcas jako zbytecnost protoze kdyz je ten Engine jenom jeden a nic po nem nededi nic tim ze z nej udelam objekt neziskám, ale zase veci jako Model, AnimatedModel : Model nebo treba Mobile, Player : Mobile, NPC : Mobile, jdou bez objektu samozrejme taky ale s dedicnosti se dost veci ulehci a hlavne zpřehlední
no zajimalo by me jestli je nejakej overenej "design pattern", nebo jak se tomu rika, kterej se bezne pouziva |
|
Návrat nahoru |
|
 |
devillante
Založen: 14. 08. 2007 Příspěvky: 164
|
Zaslal: 21. březen 2008, 12:16:59 Předmět: |
|
|
Někdo tady na fóru posílal bakalářku na téma tvorba 3D engine. Zkus to pohledat. |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 21. březen 2008, 12:37:30 Předmět: |
|
|
Pocitam, ze uz nechces pracovat v cistym C ale v C++, tedy pouzij objekty. Jejich vyhoda rozhodne neni jen v dedicnosti! Ale ve slouceni dat a metod.
Na tohle tema uz tu jedno vlakno bylo: http://www.ceske-hry.cz/forum/viewtopic.php?t=419 _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 21. březen 2008, 13:40:54 Předmět: |
|
|
MD napsal: |
Pocitam, ze uz nechces pracovat v cistym C ale v C++, tedy pouzij objekty. Jejich vyhoda rozhodne neni jen v dedicnosti! Ale ve slouceni dat a metod.
Na tohle tema uz tu jedno vlakno bylo: http://www.ceske-hry.cz/forum/viewtopic.php?t=419 |
no tak kdyz budu mit napriklad Player->doAction() a nebo player_doAction(player_t *player) tak je ta metoda vzdycky jen jedna, a ten parametr se v tech objektech na nizsi urovni stejne nejak musi predavat do this... |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1051
|
Zaslal: 21. březen 2008, 14:07:37 Předmět: |
|
|
ano objektovo sa da programovat aj C ved prve kompilatory najprv previedly zdrojovy kod v C++ do C a az ten prelozily. sice dnes su uz c++ mozno take veci co by takto urobit nesli. ale objektovy pristup je omnoho pohodlnejsi. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 21. březen 2008, 14:39:10 Předmět: |
|
|
Sosarian napsal: |
Player->doAction() a nebo player_doAction(player_t *player) |
Samozrejme, ze dulezitejsi je filozofie.
Kdyz budes duslednej, muzes to udelat i v C, tak jak pises nebo pouzit namespacy ... Ale proc? Kdyz na to existuje standardizovana syntaxe, kterou pouzivaji vsichni.
C++ je dobre v tom, ze te k nicemu nenuti. Proste programuj si tak, jak chces (a pozdeji se nediv, ze se ti to vymstilo )
Objektove programovani vnasi do kodu jisty rad - a to je super vec. Cim slozitejsi projekt tim vice to ocenuju. Kdyz jsem s OOP pred 10 lety zacinal, tak jsem tomu taky neveril
Jasne, ze dedicnost a virtualni metody se obcas hodi, jenze daleko dulezitejsi jsou ty mene napadne veci: Slouceni dat a metod, ktere s nimi pracuji. Uzavreni privatnich polozek v objektu. Konstrukce a destrukce.
A ano objekty se hodi i pro obaleni "statickych" dat. (A je celkem jedno, jak to udelas). Jedno z nejvetsich zel jsou totiz chaoticky rozhazene staticke (globalni) promenne, ke kterym kazdy nahodne pristupuje ... _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 21. březen 2008, 14:57:55 Předmět: |
|
|
MD napsal: |
...Kdyz na to existuje standardizovana syntaxe, kterou pouzivaji vsichni... |
a to je?
dejmetomu ze mam static class Engine teda a treba veci jako static class TextureManager
neni divny ze veci jako WinMain a opengl pak jako objekty nefungujou? ze je to tak divne napůl?
MD napsal: |
Slouceni dat a metod, ktere s nimi pracuji. |
tohle nejak nechapu jak se lisi kdyz mam object.funkce a funkce ? porad je to v pameti jen jednou
MD napsal: |
Uzavreni privatnich polozek v objektu. |
tohle snad nefunguje v zadnym jazku ne? a zvlast ne v cecku kde si to stejne muzu porad prepisovat ukazatelama |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 21. březen 2008, 15:19:55 Předmět: |
|
|
Ad WinMain a OpenGL... porovnavas hrusky s jablkami. To su xxxx rokov stare veci a ze su v C ma svoje dovody. Nechapem, co sa ti zda divne.
Medzi Object::method() a function() je rozdiel. A prave to je ta standardizovana syntax, o ktorej MD hovoril.
A prepisovanie ukazovatelmi? WTF? Naco? Mam pocit, ze hladas sposoby ako si zneprijemnit zivot namiesto toho, aby si si ho ulahcil a v buducnosti to ocenil  _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 21. březen 2008, 15:23:25 Předmět: |
|
|
pcmaster napsal: |
Ad WinMain a OpenGL... porovnavas hrusky s jablkami. To su xxxx rokov stare veci a ze su v C ma svoje dovody. Nechapem, co sa ti zda divne.
Medzi Object::method() a function() je rozdiel. A prave to je ta standardizovana syntax, o ktorej MD hovoril.
A prepisovanie ukazovatelmi? WTF? Naco? Mam pocit, ze hladas sposoby ako si zneprijemnit zivot namiesto toho, aby si si ho ulahcil a v buducnosti to ocenil  |
ale tak napriklad directx mas objektem, a v C# mas "winmain" jako objekt
prijde mi proste divny jednou objekt pouzivat a jednou ne
no ja se ptal na to co je to sloučeni dat a metod
to byla jen poznamka ze private: prakticky nic nedělá... |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 21. březen 2008, 15:51:08 Předmět: |
|
|
Sosarian napsal: |
a v C# mas "winmain" jako objekt |
"winmain" v C# je sice metoda objektu - ale je to staticka, tedy de facto globalni metoda (C# holt neumi globalni metody a timhle se to nahrazuje) a je to uplne stejne - zadny objekt winmain tam nemas
Sosarian napsal: |
no ja se ptal na to co je to sloučeni dat a metod
to byla jen poznamka ze private: prakticky nic nedělá... |
ale dela - zakazuje ti na tyhle veci sahat zvenku nedovolenym zpusobem a pouze k nim definovat dovoleny pristup pres public metody
coz je z hlediska navrhu dulezite - tzn. mas privatni int hodnotu, kde chces povolit jen urcite hodnoty - a udelas k ni pristupove metody ktere ji spravne nastavi. kdybys ji dal public tak tam muzes nastavit cokoliv a to je chyba v navrhu - protoze typicky to v nejakem miste udelas a uz se vezes |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 21. březen 2008, 15:59:41 Předmět: |
|
|
rezna napsal: |
Sosarian napsal: |
a v C# mas "winmain" jako objekt |
"winmain" v C# je sice metoda objektu - ale je to staticka, tedy de facto globalni metoda (C# holt neumi globalni metody a timhle se to nahrazuje) a je to uplne stejne - zadny objekt winmain tam nemas
Sosarian napsal: |
no ja se ptal na to co je to sloučeni dat a metod
to byla jen poznamka ze private: prakticky nic nedělá... |
ale dela - zakazuje ti na tyhle veci sahat zvenku nedovolenym zpusobem a pouze k nim definovat dovoleny pristup pres public metody
coz je z hlediska navrhu dulezite - tzn. mas privatni int hodnotu, kde chces povolit jen urcite hodnoty - a udelas k ni pristupove metody ktere ji spravne nastavi. kdybys ji dal public tak tam muzes nastavit cokoliv a to je chyba v navrhu - protoze typicky to v nejakem miste udelas a uz se vezes |
no mluvim o tom ze je to cely objektove takze tam neni divny vsude pouzivat objekty (ne ze by to slo jinak ze...)
kdyz si ulozis na tu private int x; ukazatel tak to muzes menit jak chces odkudkoliv... a getter a setter muzes klidne udelat aji na public...
nicmene tohle je trochu mimo téma...  |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 21. březen 2008, 16:07:14 Předmět: |
|
|
Tak jeste jednou
MD napsal: |
Objektove programovani vnasi do kodu jisty rad |
O tom jsou vsechny ty privatni polozky a zapouzdrovani metod a dat. Neni to proto, abys to hackoval pres pointery, ale naopak proto, aby ses ve svem kodu snaze vyznal.
Pr:
kód: |
class Stack {
public:
void Push(T item);
T Pop();
private:
// dalsi promenne a metody ktere zajistuji implementaci zasobniku
};
// vsimni si, ze data a metody, ktere s daty praciji, jsou spolu.
// vsimni si, ze public polozky jsou ty, ktere vidi zbytek programu. Private jsou naopak pro vnejsek neviditelne -> celkem uzitecne rozdeleni.
|
_________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 21. březen 2008, 16:08:33 Předmět: |
|
|
Ja nejako nechapem, co touto diskusiou sledujes. Alebo si nepochopil, co rezna napisal? _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 21. březen 2008, 16:09:54 Předmět: |
|
|
no tohle snad umi aji struct, a ja vim co to dela ale rikam ze to nefunguje jak ma protoze se k tomu muzu dostat aji jinak nez prez ten setter.. |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 21. březen 2008, 16:10:07 Předmět: |
|
|
Sosarian napsal: |
no mluvim o tom ze je to cely objektove takze tam neni divny vsude pouzivat objekty (ne ze by to slo jinak ze...)
kdyz si ulozis na tu private int x; ukazatel tak to muzes menit jak chces odkudkoliv... a getter a setter muzes klidne udelat aji na public...
nicmene tohle je trochu mimo téma...  |
ale ty to stavis do absurdni role - samozrejme ze to muzu udelat kdyz budu chtit - o tom zadna - ale jde o navrh a zapouzdreni a zprijemneni sve prace.
ano pokud si nutne chces menit objekty pod rukama, nikdo ti v tom nemuze branit - ale pak se nediv az nebudes schopen to oddebugovat.
co se ty toho ze C# je komplet objektovy. a co? tak v C++ jsou jak funkce tak objekty. a neni nijak divne to michat dohromady. ano volani metody je jenom __thiscall konvence volani funkce, kde se jako prvni parametr preda funkce - nic jineho. ale to te preci nemusi zajimat. jde o samotny navrh a jeho cistotu a moznost s tim rozumne a lidsky pracovat. to je to o cem je OOP. a to ze ho pouzijes objekty v ramci main/WinMain snad nevadi ne? nebo to je nejakej problem? - a pokud ti to az tak vadi - udelej si tridu Application - a ve WinMain mej jenom
kód: |
int WinMain()
{
Application app;
return app.Run();
}
|
a razem krome 2 radku ve WinMain mas kompletne objektovou aplikaci |
|
Návrat nahoru |
|
 |
|