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

31

30.03.2009, 14:46

Ich wusste nichtmal, dass sowas ueberhaupt kompiliert. Aber man lernt nie aus. Man kann ja this auch nicht einfach 'nen neuen Wert zuweisen. Ist wie ... Selbstmord. Naja, ich werde es nie verwenden, mag aber sein, dass es irgendwo praktisch ist.
If it were not for laughter, there would be no Tao.

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

32

30.03.2009, 22:38

freitod ist ne durchaus legitime sache.. (solange du es alleine und nicht eine zu grosse sauerei machst)

33

31.03.2009, 10:04

Nicht fuer Christen ...
If it were not for laughter, there would be no Tao.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

34

31.03.2009, 11:02

Ich sag dann immer, dass wenn Gott den Menschen das Leben als Geschenk gegeben hat, man es ihm doch auch wieder zurückgeben darf ;)

Naja, Fundamentalisten wird man damit nicht überzeugen ...

35

31.03.2009, 14:26

Ein Geschenk zurück zu geben ist aber auch sehr unhöflich. Der Anstand gebietet dir dein Leben an jemand anderen zu verkaufen, wenns dir nicht gefällt. (Und hoffen, dass es nicht auffällt)

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

36

31.03.2009, 18:37

Na bevor ihr noch ein paar Wochen rumrätselt wie sowas nützlich sein kann....
In meinen Fall hat das ganze durchaus einen stichhaltigen Grund:

Ich hab eine GUI die für mein gesamtes Spiel gilt. Desweiteren hab ich eine Art Spielzustandsklasse, die in einer globalen Variable liegt. Die Spielzustandsklasse erbt von einer abstrakten Klasse so dass ihr Aussehen in den Grundzügen immer gleich ist, und sie immer auf der selben Variable liegen kann.
Eine Funktion zur Verarbeitung der Nachrichten, die die GUI bei zB. bei Schaltflächendruck erzeugt, existiert nun in jeder Spielzustandsklasse, damit die Nachrichten schonmal gleich grob aufgeteilt sind.
So jetzt gibts natürlich auch gewisse böse Buttons wie "Zurück zum Menu" die nichts anderes bewirken als... na? Genau die Klasse - in der ja auch die Reaktion auf diesen Knopfdruck verarbeitet wird - zerstört sich selbst und erstellt den neuen Spielzustand.
(Das schaut dann konkret so aus, dass die globale Variable erst freigeräumt wird und dann mit einem anderen Spielzustand neu beschrieben wird)


Gut möglich, dass sowas auch noch eleganter geht.
Aber der Leitgedanke ist, dass ich so die Nachrichten der GUI so schonmal grob nach Spielzustand aufteilen kann, bevor ich genauer unterscheide welches Element die Nachricht ausgesendet hat.

Wenn man das konsequent macht, kommt man irgendwann an den Punkt wo die Klasse sich selbst zerstört. ;)

Tschuldigung, dass die Erklärung jetzt so lange geworden is. :D

37

31.03.2009, 20:14

Zitat von »"Wümpftlbrümpftl"«

So jetzt gibts natürlich auch gewisse böse Buttons wie "Zurück zum Menu" die nichts anderes bewirken als... na? Genau die Klasse - in der ja auch die Reaktion auf diesen Knopfdruck verarbeitet wird - zerstört sich selbst und erstellt den neuen Spielzustand.
(Das schaut dann konkret so aus, dass die globale Variable erst freigeräumt wird und dann mit einem anderen Spielzustand neu beschrieben wird)

Gut möglich, dass sowas auch noch eleganter geht.
Denke ich auch. ;)

Ich habe etwas ziemlich Ähnliches gemacht, ohne jedoch eine Instanz selbst zerstören zu müssen. Die verwaltende Klasse ruft die einzelnen Oberflächen (genauer deren spezialisierten virtuellen Methoden) auf, die je nach Situation einen anderen Wert zurückgeben (Enum-Typ).

C-/C++-Quelltext

1
MyState = MySurface->Run();

Falls dieser Wert sich geändert hat, kommt folgende Memberfunktion zum Zug:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void AdminClass::ChangeState(State NewState)
{
    MyState = NewState;
    delete MySurface;
    
    switch (MyState)
    {
        case Game:              MySurface = new Game();             break;
        case MainMenu:          MySurface = new MainMenu();         break;
        case Info:              MySurface = new InfoMenu();         break;
        case Highscore:        MySurface = new HighscoreMenu();    break;
        // ...

    }
}

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

38

31.03.2009, 20:58

Hm interessante Idee. Auf jedenfall einiges aufgeräumter als bei mir.
Ich hab zwar auch eine Funktion die den Spielzustand wechselt - aber die macht das nach Aufruf und ist ebenfalls global.
Außerdem kann man so verhindern, dass der Spielzustand an einer unerwünschten Stelle geändert wird.

Danke für den Hinweis, werd das vieleicht beim nächsten mal übernehmen.
Man das is immer so frustrierend - warum bin ich da selbst nich draufgekommen ^^

Edit/PS: Mein Absturzfehler von dem ich ganz am Anfang des Threads gesprochen hab is übrigens behoben - aber das ist eine ganz ganz andere Geschichte (......)

39

31.03.2009, 21:20

Zitat von »"Wümpftlbrümpftl"«

Man das is immer so frustrierend - warum bin ich da selbst nich draufgekommen ^^
Das kenn ich. Du willst nicht wissen, wie es bei mir früher aussah. :lol:

In letzter Zeit versuche ich mich allerdings vermehrt auf gutes Design zu achten. Aber das ist selten wirklich so gut möglich, wie ich es mir vorstelle. Dennoch kommt man seinen Idealen mit zunehmender Erfahrung immer näher... bis man sich neue Ideale setzt. ;)

Werbeanzeige