dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

viens mainigais visam klasem

 
dev.gamez.lv Forum Index -> Microsoft DirectX
View previous topic :: View next topic  
Author Message
kaszu



Joined: 28 Dec 2004
Posts: 103
Location: Iceberg, Northpole

PostPosted: Wed Nov 02, 2005 12:39 am    Post subject: viens mainigais visam klasem

Es veidoju nelielu 2d dzineeju, bet man rodas problema, jo man ir dazadas klases Engine,Sprite,Font,... bet viniem visiem ir vajadzigs viens kopigs mainigais, kurs tiek izveidots iek klases Engine, kaa to panaakt? Engine klases instance ir tiki viena, bet Spraiti var buut n. Meginaju izveidot arpus visam klasem, tacu tad rada, ka tas jau ir nodefinets, jo tas h fails tiek izsaukts no katras klases, uzliku kaa static, bet tad rodas veel citas probleemas. Nevaru es vinu defineet ieks engine, jo tad paareejie netiek klaat.

Teoretiski kaa to vareetu realizeet?
Back to top
View user's profile Send e-mail Visit poster's website
zutiic
Indago dalībnieks
Indago dalībnieks


Joined: 12 Jan 2004
Posts: 140
Location: Rīga

PostPosted: Wed Nov 02, 2005 8:57 am    Post subject:

varbuut ssitas risinaajums nebuus tas iistais (jo neiedziljinaajos/neizpratu postu), bet dzinja .h faila saakumaa un beigaaas ieraksti sekojosho...
Code:
#ifndef DZINIS_H
#define DZINIS_H

  ...[dzinja kods]...

#endif

, kur vaarda 'DZINIS' vietaa liec sava .h faila nosaukumu. tam vajadzeetu glaabt programmu no vairaakkaarteejas .h faila nolasiishanas (ja vairaakos citos .h failos ir shitas .h "#includeets")
un kaapee veidot atsevisku klasi 'engine'? nav eertaak ja tu visas dzinja pamatfunkcijas un klases saliec "namespaacee" 'engine'?
Code:
namespace engine
{
 ...[klases, funkcijas]...
}


..huh, un shito tev staasta kaads, kurss tikai pirms gada ar cpp saaka njemties:D
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed Nov 02, 2005 9:32 am    Post subject:

Manuprāt jādara kautkas šāds:
iekš engine.h:
Code:

class Engine {
  static Engine* instance;
  Engine(...); // privāts konstruktors, lai citi no ārpuses nevar jaunu uztaisīt
public:
  static Engine* getInstance();
  ...   
}

Iekš engine.cpp:
Code:
Engine::instance = 0;
Engine* Engine::getInstance() {
  if (instance != 0) instance = new Engine(...); // izmantojam privāto konstruktoru
  return instance;
}

(vienīgais mīnuss, ka destruktors izsauksies tikai terminējoties programmai, ja vajadzīgs ātrak destruktēt, vai otrādi - ātrāk konstruēt, nekā pirmais izsaukums, tad uztaisi friend klasi kautkādai citai klasi šo Engine, un lai tā klase tad izsauc privātos Engine konstruktoru/desktruktoru. Vai arī cits variants - taisi citu Factory klasi, kura pēc pieprasījuma uzkonstruēs šo Engine, tādējādi pilnīgi kontrolējot Engine radīšanu/dzēšanu tās factory klases konstruktorā/destruktorā)

Un tad iekš tiem visiem spraitiem, nevis katram taisi jaunu Engine objektu, bet gan dari šādi:
Code:
#include "engine.h"
Egine* engine = Engine::getInstance();
engine->....

static nodrošinās to, ka objekts ir pieejams neatkarīgi no izveidotajām Engine instancēm (līdzīgi kā publiskie mainīgie iekš procedūrām - vienmēr pieejami).
Back to top
View user's profile Send e-mail
gazz



Joined: 03 Jan 2004
Posts: 355
Location: Teika

PostPosted: Wed Nov 02, 2005 11:21 am    Post subject:

es ar uzskatu ka bubu piedaavaatais ir optimaals risinaajums. Ja gribas par to ko vairaak uzzinaat, tas saucaas Singleton pattern. Ideja ir taada ka singleton klasei var buut viena un tikai viena instance(objekts). Ieksh speelju dzineejiem singletonus parasti izmanto resursu menedzheriem, konfiguraacijai, loggeram un tavaa gadiijumaa noteikti render managerim. Singletonam jau var pievienot arii Init un Release vai kaut kaadas idejiski liidziigas methodes, kas nodarbotos ar Engine izveidi/izniicinaashanu.
Iesaku uzmest aci sheit: Enginuity, Part II Tur ir gan par smart pointeriem, gan funktoriem, gan arii jau piemineeto Singletonu
Back to top
View user's profile Send e-mail
EDDY



Joined: 07 Oct 2005
Posts: 1610
Location: Dzimtā zeme, Latvija

PostPosted: Wed Nov 02, 2005 11:36 am    Post subject: Re: viens mainigais visam klasem

kaszu wrote:
Es veidoju nelielu 2d dzineeju, bet man rodas problema, jo man ir dazadas klases Engine,Sprite,Font,... bet viniem visiem ir vajadzigs viens kopigs mainigais, kurs tiek izveidots iek klases Engine, kaa to panaakt?


Uztaisi klasi Engine .
Un pievieno tai klasi Spritefriend tipa klasi.

Tā dari ar visām citām, jo tev Engine ir galvenā, bet pŗējais lai ir mantotās kā Friend klases.
Vai aizej uz www.humus.ca un papēti kādu OpenGL piemēru, no tiem tu vairāk sapratīsi, jo tas arī ir balstīts uz dzinēju. [/code]
_________________
Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed Nov 02, 2005 12:30 pm    Post subject: Re: viens mainigais visam klasem

EDDY wrote:
Uztaisi klasi Engine .
Un pievieno tai klasi Spritefriend tipa klasi.

Un kā friend klases norādīšana (t.i. pieeja privātajiem un protected memberiem Sprite klasē no Engine klases) nodrošinās, ka Engine klase būs tikai vienā instancē izveidota?
Back to top
View user's profile Send e-mail
EDDY



Joined: 07 Oct 2005
Posts: 1610
Location: Dzimtā zeme, Latvija

PostPosted: Wed Nov 02, 2005 1:04 pm    Post subject:

Kāpēc visu sarežģīt?
Besī ārā tie programmētāji, kas visu sarežģī. Crying or Very sad
Es vienkārši atbildēju uz Kaszu jautājumu, ko darīt, ja vajag izveidot trijām klasēm pieeju pie viena mainīgā.
Tas ir - trīs draugi, kuri dala vienu ābolu. Smile
Manā gadījumā ir klase cilvēks, firend klases ir Jānis, otrā friend klase Pēteris u.t.t..
To no galvas nevar tā pateikt.
Bet ideja slēpjās friend. Man bija tāda pati problēma, kad kādas citas klases mainīgie jāizdara pieejami otrai klasei.
Vieglāk uztaisīt galveno klasi, kaut vai ar nosaukumu 2D_Engine un tad kaut vai 100 klases, kas veic konkrētu darbu: Fonts, skaņa, modelis u.t.t.
Protams, to visu var atrast iekš kaut vai Māra Bulāna 3. tutoriāļa.

http://indago.gamez.lv/Izstradataji/Raksti/GLSL_Shadows/ShadowMaps.htm

Tur var atrast atbildi. Vajag tikai analizēt un domāt līdzi un pielāgot situāciju dzīvei, veidot shēmas un viss būs saprotami.
_________________
Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed Nov 02, 2005 1:54 pm    Post subject:

Ak tā, nu sapratu, ko tu biji domājis. Tas ir arī variants. Bet smuki tas gan nav. Nojauc visu ekapsulācijas būtību OOP programmēšanā. Pie tam, tas jau neatrisina to, ko viņš gribēja, tur tāpat jāuzmanās, lai nesanāk izveidot lieku (vēlvienu) Engine instanci.

Tavā gadījumā, to 2D_Engine jau labāk pataisīt par neimspeisu nevis publiski pieejamu klasi. Protams, ja tajā ir tikai mainīgie nevis metodes, tad jau vispār var labi iztikt ar veco labo struct. kautgan viss tāpat atkarīgs no tā kāds kods, un ko un kā tas dara.. Viena universāla risinājuma visam nav.

Un nemaz tik sarežģīti statiskie mainīgie nav.
Tavs gadījums par var būt sarežģītāks, kad viss vienā putrā būs samests (tb viss pieejams visiem), var pats sajukt kas ko sāk izmantot lieliem koda apjomiem. Tam jau tieši enkapsulācija domāta, lai noslēptu to, kas nav vajadzīgs.
Back to top
View user's profile Send e-mail
EDDY



Joined: 07 Oct 2005
Posts: 1610
Location: Dzimtā zeme, Latvija

PostPosted: Wed Nov 02, 2005 2:23 pm    Post subject:

Namespace ir raksturīgs C# valodai.(Es nesaku, ka C++ tā nav)
Bet, ja runā par C++, tad labāk izveidot kā teicu.
Galveno klasi kā grafisko renderu, bet par apakšklasēm izmantot tos, kas veido šo rendering system.
Un būs tev apakšklasēm pieejami visi tie mainīgie, kas ir mātes klasei.

P.S. Ir tāds nerakstīts teiciens - Jo labāks programmētājs, jo sliktāka tam grafika.
_________________
Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed Nov 02, 2005 5:05 pm    Post subject:

Nu nē. Ja tu par apakšklasi sauc mantoto klasi (child-parent), tad galīgi tev nepiekrītu. Apakšklases paredzētas skaistākai strukturizācijai nevis enkapsulācijai. Un par parentu jāizmanto kautkas tāds, kam ir kautkas kopīgs un apakšklasē paplašināt to. Taču rendereris ir viena lieta un objekti galīgi cita.

Turpertī ja tu par apakšklasi sauc pieaistīto klasi (vai ar pointeri, vai pēc vērtības), kā reāli to īstenībā nesauc, tad gan tev taisnība, tā ir labi rakstīti.

Un neimspeisi iekš C++ spēlē lielu lomu lielos projektos. Tik nenozīmīgi nemaz tie nav. Citādi varētu dikti daudz putroties datu tipos (klasēs).
Nu varbūt mazos/vidējos softos tie nespēlē tik lielu lomu, taču noderīgi gan tie ir.
Back to top
View user's profile Send e-mail
kaszu



Joined: 28 Dec 2004
Posts: 103
Location: Iceberg, Northpole

PostPosted: Wed Nov 02, 2005 7:37 pm    Post subject:

EDITED:
Bija problema ar linkeri, beidzot izdevaas atrisinaat

pareizi bija nevis:
Engine::instance = 0;
bet
Engine* Engine::instance = 0;

pustundu mekleeju sso joku.

Thanks bubu un visiem paarejiem.
Back to top
View user's profile Send e-mail Visit poster's website
EDDY



Joined: 07 Oct 2005
Posts: 1610
Location: Dzimtā zeme, Latvija

PostPosted: Thu Nov 03, 2005 12:21 pm    Post subject:

Moins, Bubu, tu neesi analītiķis. Smile
_________________
Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday
Back to top
View user's profile
Kamazs
Guru
Guru


Joined: 17 Jan 2003
Posts: 829
Location: The glorious ancient city of Loja

PostPosted: Thu Nov 03, 2005 1:34 pm    Post subject:

Varbūt patiesība ir tāda, ka nav "lekciju lasītāju" un "analītiķu", bet vienkārši labi programmētāji un ne tik labi? Profesionāļi un amatieri?
_________________
...un es uzskatu, ka Fallout ir etalons
Back to top
View user's profile Send e-mail Visit poster's website
EDDY



Joined: 07 Oct 2005
Posts: 1610
Location: Dzimtā zeme, Latvija

PostPosted: Thu Nov 03, 2005 2:00 pm    Post subject:

Varbūt, bet runa nav par to.
_________________
Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday
Back to top
View user's profile
Display posts from previous:   
dev.gamez.lv Forum Index -> Microsoft DirectX All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group