Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

05.09.2003, 21:54

Klassenprobleme

Hi,
also ich habe folgendes Problem.
ich hab meine Engine komplett in eine Klasse gepackt: CEngine!
Diese Klasse wiederum benutzt Klassen wie CInput, CFont, CD3D, usw,...
Nun kommt es aber vor, das ich z.B. in der Font-Klasse auf das D3D Device, welches in der Klasse CD3D ist, benutzen möchte, um z.B. eine Textur zu öffnen, oder auf das Device zu rendern.

Was für möglichkeiten gibt es da?

Vielen Dank für die Tipps...

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

05.09.2003, 22:12

Das gleiche Problem habe ich auch andauernd. Im Buch die Lösung finde ich auch nicht ganz so elegant. Ich glaube aber da kommen die sagenumwobenen Singletons ins Spiel. Aber ich habe keine Ahnung.

Anonymous

unregistriert

3

05.09.2003, 22:45

Ja, genau das meinte ich, die Lösung im Buch finde ich auch nicht so Prickelnd. Ich hab bislang immer mit "hacks" versucht das in den Griff zu bekommen, aber das ist mit Sicherheit keine langfristige Lösung.

Ich hab auch schon tausen Tuts gelesen, aber nichts konkretes gefunden.
Globale Variable, statische Member/Funktionen mag ich beides nicht...

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

4

05.09.2003, 22:47

Es geht doch nichts über gute Interfaces, gell? ;D

Also wenn man solche Probleme damit hat sollte man sich etwas mehr mit Vererbung auseinandersetzen und Singletons, der Meyers Singleton ist für solche Zwecke sehr gut.

Achja, klitze kleiner Tipp am Rande: Alles in eine Klasse? Pfui! Wofür wurden denn NameSpaces erfunden? ;)

Anonymous

unregistriert

5

05.09.2003, 22:55

Was wäre denn der konkrete Vorteil, wenn ich das anstatt in eine Klasse in ein namespace packen täteräte???

gruß Gast

6

05.09.2003, 23:21

Für kleinere Projekte nehme ich dafür immer ein Singleton. Das klappt ganz gut so. Für größere Projekte benutz ich allerdings auch ein Interface Design.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Tobiking

1x Rätselkönig

  • Private Nachricht senden

7

05.09.2003, 23:46

Ähm gibts da auch irgendwo was gutes im Inet drüber. Mein Google hat in Deutsch keinen einzigen vernünftigen Link ausgespuckt und auf englisch habe ich bei gamedev.net was gefunden aber nur vor und nachteile. Ich will wissen wie das Funktioniert.

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

8

06.09.2003, 11:49

Hi,

ich hab mal schnell was quick'n dirty gecodet :)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
class IRenderInterface
{
public:
    virtual IRenderInterface    (void)          = 0;
    virtual IRenderInterface    (void)          = 0;

    virtual void init       (void)          = 0;
    virtual void shutdown       (void)          = 0;
    virtual void restore        (void)          = 0;

    virtual void clear      (int r, int g, int b)   = 0;
    virtual void present        (void)          = 0;
    // [...] zusätzliche Virtual Funktionen
};

class COpenGLRender : public IRenderInterface
{
public:
    COpenGLRender   (void);
    ~COpenGLRender  (void);

    void init   (void);
    void shutdown   (void);
    void restore    (void);

    void clear  (int r, int g, int b);
    void present    (void);

private:
    // SDL Kram, da SDL Prima mit OpenGL arbeiten kann.
};


class CDirect3DRender : public IRenderInterface
{
public:
    CDirect3DRender (void);
    ~CDirect3DRender(void);

    void init   (void);
    void shutdown   (void);
    void restore    (void);

    void clear  (int r, int g, int b);
    void present    (void);

private:
    // DX Kram
};


class ITexturInterface
{
public:
    virtual ITexturInterface    (void)      = 0;
    virtual ~ITexturInterface   (void)      = 0;

// Um in DX Texturen zu laden z.B. mit D3DX muss man oft noch das Device angeben, hier geben wir das RenderInterface an.
    virtual void load       (std::string TexturName, IRenderInterface Renderer) = 0;
    virtual void unload     (void)              = 0;
    virtual void reload     (void)              = 0;

    virtual void setTexture     (void)              = 0;
    // [...] zusätzliche Virtual Funktionen
};

class COpenGLTextur : public ITexturInterface
{
public:
    COpenGLTextur       (void);
    ~COpenGLTextur      (void);

    void load       (std::string TexturName, IRenderInterface Renderer);
    void unload     (void);
    void reload     (void);

    void setTexture     (void);
    // ...
public:
    // Na 3. Dürft Ihr raten ;D
};

class CDirect3DTextur : public ITexturInterface
{
public:
    CDirect3DTextur     (void);
    ~CDirect3DTextur    (void);

    void load       (std::string TexturName, IRenderInterface Renderer);
    void unload     (void);
    void reload     (void);

    void setTexture     (void);
    // ...
public:
    // Na 3. Dürft Ihr raten ;D Tipp: IDirect3DTexture (Auch ein Interface aber von DX;))
};


Nix besonderes aber so kann man z.B. OpenGL+SDL und DirectX miteinander verbinden :)

@Gast:
Learing by doing :) Was meinste wohl wieso die ganzen C++ Klassen, Funktionen und co in einen globalen namespace gestopft wurden, na klingelts? ;D

Anonymous

unregistriert

9

06.09.2003, 14:56

Jo danke, Patrick, das iseht schon ganz nach dem aus was ich suche,...

Vielleicht trotzdem noch wer andere Vorschläge?

Gruß, Gast!

Tobiking

1x Rätselkönig

  • Private Nachricht senden

10

06.09.2003, 18:31

Also ich versteh die hälfte von dem Quellcode bestimmt nicht aber ich habe das mit den Singletons hinbekommen und grötenteils verstanden. Die Seite:
http://www.cs.fhm.edu/~schieder/seminar-oo-modellieren-ws97-98/f7alpha1.informatik.fh-muenchen.de/~ifw94005/singleton.html
hat mir geholfen.

Werbeanzeige