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

21

12.01.2016, 20:26

Ich habe im Buch von Heiko Kalista nach Antworten gesucht

Auf welche Frage denn?

Habe das gefühl du weist selber nicht so richtig was du machen willst.

Und nein, ich glaube nicht das Singelton die Richtige Antwort ist (egal wie die Frage auch heißen mag)! ;)
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Koschi« (12.01.2016, 20:34)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

22

12.01.2016, 23:35

Hast du einen konkreten Fall für dein Problem? Dann kann man dir an dem Beispiel sicherlich besser weiterhelfen. In dem Code den du gezeigt hast wird eben kein Objekt erstellt und auch keins zerstört.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

23

13.01.2016, 09:28

Klar wird ein Objekt erstellt, aber eben nur einmal :D (oder sprichst du nicht von der singleton klasse?)

24

13.01.2016, 20:10

Also ich versuche gerade ein Pong Spiel zu entwickeln und möchte das wenn der Ball das Spielfeld hinter denn Spieler oder Gegner verlässt zerstört(Destruktor) wird.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
void Ball:: Update(float ElapsedTime) {

    Rect.move(CurrentSpeed * ElapsedTime, CurrentAngle * ElapsedTime);

    if (Rect.getPosition().x < 0 || Rect.getPosition().x > 800) {

        // Ball zerstören(Destruktor aufrufen)

    }

}

25

13.01.2016, 20:24

Also ich versuche gerade ein Pong Spiel zu entwickeln und möchte das wenn der Ball das Spielfeld hinter denn Spieler oder Gegner verlässt zerstört(Destruktor) wird.

Genau so was habe ich mir gedacht!

Ist aber aus meiner Sicht der Falsche Ansatz. Du kannst dem Ball eine Eigenschafte geben bool active oder so und wenn er nicht aktive sein soll, wird die Eigenschafte entsprechend gesetzt. Die update und/oder draw-Methode berücksichtigen das dann natürlich.

Edit:
Den Ball zu Zerstören (So das der Destruktor aufgerufen wird) würde auch gehen, wenn man ihn in einen STL Container packt. Ist aber wie gesagt aus meiner Sicht der falsche Ansatz.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

26

13.01.2016, 20:39

Ah... Ok aber wie sieht das denn in der Praxis aus ich kann mir das gerade nicht vorstellen wie es aussehen soll ?(

Habe die bool für Active schon erstellt :)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Ball:: Update(float ElapsedTime) {

    Rect.move(CurrentSpeed * ElapsedTime, CurrentAngle * ElapsedTime);

    if (Rect.getPosition().x < 0 || Rect.getPosition().x > 800) {

        IsActive = false;

    }

    if (IsActive == false) {

        // ???

    }

}

27

13.01.2016, 20:49

Ah... Ok aber wie sieht das denn in der Praxis aus ich kann mir das gerade nicht vorstellen wie es aussehen soll

Naja du könntes dir ein Timer dazu nehmen und wenn der Timer abgelaufen ist und der Ball noch nicht aktive ist ihn wieder aktive setzen. Ihn vorher wieder an seine Startposition setzten und dann den Ball wieder losfliegen lassen.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

28

13.01.2016, 21:11

Ungefähr so ? ^^ Wie kann ich es aber machen das der Timer die ganze zeit auf 0 ist und erst los zählt wenn der Ball aus dem Spielfeld ist ? ?(

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void Ball:: Update(float ElapsedTime) {

    Rect.move(CurrentSpeed * ElapsedTime, CurrentAngle * ElapsedTime);

    if (Rect.getPosition().x < 0 || Rect.getPosition().x > 800) {

        IsActive = false;

    }

    if (IsActive == false && Clock.getElapsedTime().asSeconds() > 2.0f) {

        Rect.setPosition(400, 300);
        IsActive = true;
        Clock.restart();

    }

}

29

13.01.2016, 21:26

Da ich ungern Sachen vorkaue mit Code, ein kleiner Denkanstoss wie man das umsetzen könnte.

C-/C++-Quelltext

1
BallResetTime = Clock.getElapsedTime().asSeconds() + 2.0f;
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

30

13.01.2016, 21:32

Hehe Danke :D

Werbeanzeige