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

1

02.06.2010, 22:22

OOD - Brauche Hilfe

Hi,

ich bekomme es nicht hin ein gutes Design zu entwickeln.
Singletons, statische objekte sind ja wie mir schon gesagt wurde eine sehr schlechte und veraltete Methode etwas zu programmieren.
Aber wie soll ich denn z.B. ein InputObjekt in der WndProc(zum Tasten überprüfen) verfügbar machen ohne gleich global zu arbeiten?
Ich habe echt Probleme damit Abhängigkeiten verschiedener Klassen zu überwinden.
Gibt es da bestimmte Techniken, Patterns etc. oder muss ich mich da so lange dran versuchen bis es klappt? :(

€ ohh Mist habs ja in den Grafikteil gepostet, bitte verschieben :P

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

02.06.2010, 22:40

Du kannst z.B ein Objekt machen, welches dir solche Sachen enthält und das dann als Parameter an andere Objekte übergeben.
Also z.B erstellst du einen Manager, welcher dann Funktionen, wie GetInput anbietet und wo du dann dein Inputobjekt her bekommst. Ich mache das bei mir so ähnlich und das geht eigentlich ganz gut.

Bin gespannt, was andere da so machen, weil ich mir das auch etwas länger überlegt habe, wie ich das machen soll.

3

03.06.2010, 01:42

Also wir hatten bisher auch bei uns viele Singletons etc.
Im Moment sind wir dabei auf ein Eventsystem umzusteigen.
So haben die Klassen untereinander erstmal keine Abhängigkeiten, ausser halt die Events ;)

4

03.06.2010, 08:30

Ich mache es auch so ähnlich wie drakon. Habe es dir aber bereits als Beispiel geschickt in deinem Thread. Es kommt dann natürlich immer drauf an, man kann ja auch nicht alle Funktionen eines Frameworks in eine Klasse stecken. Man sollte sie zumindest gut aufteilen und diese Variante sollte auch nur verwendet werden, wenn es wirklich nicht anders geht, bzw. wenn man einfach keine bessere Idee hat. Ein wichtiges Ziel der objektorientierten Programmierung soll ja sein, dass die Klassen möglichst eigenständig sind. Ich denke ein Buch über Design Patterns wird dir mal ganz gut tun.
Ich weiß es dauert viel zu lange, aber ich habe echt nur Pech. Habe mir heute mal eben im Zeigefinger Nerv und Sehne durchtrennt. Dennoch kann es nicht mehr all zu lange dauern mit dem Tutorial. Außerdem kamen auch noch Prüfungen und dergleichen dazwischen.
Klatscht die Hopper an die Wand, Deutschland ist ein Raverland! :D

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

03.06.2010, 11:54

Als Beispiel für das Inputsystem, in unsrem Framework haben wirs so gelöst:

Es existiert ein Interface namens MessageHandler welches von potentiellen Message Verwertern implementiert wird. So gibts dann z.B. eine Klasse Keyboard oder Mouse die dieses Interface implementieren. Also stark gekürzt:

C-/C++-Quelltext

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
class MessageHandler
{
public:
    // Returns true if the message was handled otherwise false
    virtual bool HandleMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) = 0;
};

// ...

class Keyboard : public MessageHandler
{
    // Andere spezifische Methoden ...

public:
    // implement MessageHandler
    virtual bool HandleMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
}

class Mouse : public MessageHandler
{
    // Andere spezifische Methoden ...

public:
    // implement MessageHandler
    virtual bool HandleMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
}

// Weitere Message Handler ...


Die Instanz welche die Applikation repräsentiert (und u.A. die Messagepump beinhaltet) enthält eine Liste aller notwendigen Message Handlern:

C-/C++-Quelltext

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
class Application : public MessageHandler
{
    typedef std::vector<Win32MessageHandler *> handler_list_t;

private:
    handler_list_t m_messageHandlers;

    static LRESULT CALLBACK windowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

    // Code für Applikation initialisierung usw...
};

LRESULT CALLBACK Application::windowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    // 1. Application Pointer aus Window User Parametern

    for (handler_list_t::iterator it = m_messageHandlers.begin(); it != m_messageHandlers.end(); ++it) 
    {
        MessageHandler *handler = *it;
        if (handler->HandleMessage(hWnd, message, wParam, lParam))
        {
            // ...
        }
    }

    // Default Behandlung von nicht behandelten Nachrichten
}
@D13_Dreinig

6

03.06.2010, 12:52

Danke für eure Antworten!
Jetzt habe ich auch ein paar gute Ideen wie ich die Engine doch noch zu Ende bringen kann :)
Deine Lösung gefällt mir auch sehr David_pb :)

Gibts denn ein Buch was sehr zu empfehlen ist?
Da ich momentan nicht so viel Geld hab kann ich mir keinen Fehlgriff erlauben :D

flux

Treue Seele

  • Private Nachricht senden

7

03.06.2010, 13:20

Head First Design Patterns
Das ist meiner Meinung nach ein sehr tolles Buch. Ist aber nicht auf Spiele ausgerichtet ;-)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

03.06.2010, 14:14

Zu Designpatterns: Design Patterns
@D13_Dreinig

9

10.06.2010, 20:00

Seid ihr in der Lage UMLs aus Visual Studio 2010 zu öffnen?
Wollte mal eine erstellen und sie euch schicken um Hilfe zu bekommen.
Bekomm es einfach nicht hin das Framework im guten OO-Stil zu schreiben.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

12.06.2010, 11:22

Seid ihr in der Lage UMLs aus Visual Studio 2010 zu öffnen?
Wollte mal eine erstellen und sie euch schicken um Hilfe zu bekommen.
Bekomm es einfach nicht hin das Framework im guten OO-Stil zu schreiben.
Das ist auch keine einfache Aufgabe. Im Normalfall lernt man erst über die Jahre dazu...
@D13_Dreinig

Werbeanzeige