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

27.11.2003, 16:35

Event-Handler als GameManager und andere Probleme

Hi Leute!
In letzter Zeit habe ich mir lange Gedanken darüber gemacht, wie denn die Struktur von meinem Spiel aussehen soll. Als Spielverwaltungs-Instanz habe ich mir da einen native C++ Event-Handler gemacht. Dieser sollte prinzipiell genau das sein was ich suche (bin amateur ^^ wisst ihr was besseres? hatte schon n switch-statement aber des wollt ich ja grade weg haben), doch ich bekomm es leider nicht auf die Reihe mein System so global zur Verfügung zu stellen, dass jede Klasse alle Events (die irgendwo von irgendwas geworfen wurden) verarbeiten kann. Dies funktioniert nur innerhalb einer Klasse.

Hier mein Code (hab ich aus der MSDN geklaut ;D )

Event-Sender:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
//event-sender class
[event_source(native)]
    class CESender 
{
public:
    CESender(void);
    ~CESender(void);

    __event  void  MyEvent(EDXMESSAGE Message);
    

};


Event-Receiver:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//event-receiver class
[event_receiver(native)]
class CEReceiver
{
public:
    CEReceiver(void);
    ~CEReceiver(void);

        
   void  DxAppEventHandler(EDXMESSAGE Message);

   void hookEvent(CESender* pSource) {
      __hook(&CESender::MyEvent, pSource, &CEReceiver::DxAppEventHandler);
   }

   void unhookEvent(CESender* pSource) {
      __unhook(&CESender::MyEvent, pSource, &CEReceiver::DxAppEventHandler);
   }
};


und so bind ich das ganze ein:

Quellcode

1
2
3
4
5
6
7
#include "CDxEvent.h"

#ifndef CEVENT_CREATED
static CESender* ESender      = new CESender();
static CEReceiver* EReceiver = new CEReceiver();
#define CEVENT_CREATED
#endif


Diese Datei include ich dann überall wo ich den EventHandler benutzen will. Nur leider kann ich damit net zwischen zwei Objekten die den Header haben Events versenden :(

Please Help!

2

28.11.2003, 19:21

Hatte mal die Idee, etwas aehnliches zu basteln. Nur halt keine Events sondern einfach nur fuer das Verschicken von Nachrichten.

Der MessageHandler liegt dabei in einem eigenen Thread und es gibt natuerlich eine Interface Klasse. Jedes Objekt das mit dem MessageHandler zusammenarbeiten will muss dann das Interface vererben. Dann wird das Objekt im MessageHandler Registriert. Jedes Objekt bekommt dann einen Namen zugewiesen oder einfach eine Nummer. Im Interface sind dann Methoden Definiert, ueber die Nachrichten Empfangen werden koennen oder gesendet werden koennen.

Hab dieses System noch nie Implementiert und kann daher auch nicht sagen ob es auch gut Funktioniert.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

3

02.12.2003, 10:37

Habs irgendwie mit einer statischen Klasse hinbekommen. Danke trotzdem für den Tip.

Werbeanzeige