.[ ČeskéHry.cz ].
Návrh hry
Jdi na stránku 1, 2, 3  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 21. březen 2008, 10:44:54    Předmět: Návrh hry Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
devillante



Založen: 14. 08. 2007
Příspěvky: 164

PříspěvekZaslal: 21. březen 2008, 12:16:59    Předmět: Odpovědět s citátem

Někdo tady na fóru posílal bakalářku na téma tvorba 3D engine. Zkus to pohledat.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
MD



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

PříspěvekZaslal: 21. březen 2008, 12:37:30    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 21. březen 2008, 13:40:54    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1051

PříspěvekZaslal: 21. březen 2008, 14:07:37    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
MD



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

PříspěvekZaslal: 21. březen 2008, 14:39:10    Předmět: Odpovědět s citátem

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 Wink )

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 Wink

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 21. březen 2008, 14:57:55    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1827

PříspěvekZaslal: 21. březen 2008, 15:19:55    Předmět: Odpovědět s citátem

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 Wink
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 21. březen 2008, 15:23:25    Předmět: Odpovědět s citátem

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 Wink

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 21. březen 2008, 15:51:08    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 21. březen 2008, 15:59:41    Předmět: Odpovědět s citátem

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... Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
MD



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

PříspěvekZaslal: 21. březen 2008, 16:07:14    Předmět: Odpovědět s citátem

Tak jeste jednou Wink
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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1827

PříspěvekZaslal: 21. březen 2008, 16:08:33    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 21. březen 2008, 16:09:54    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 21. březen 2008, 16:10:07    Předmět: Odpovědět s citátem

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... Smile


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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3  Další
Strana 1 z 3

 
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