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

pushback

Frischling

  • »pushback« ist der Autor dieses Themas

Beiträge: 2

Wohnort: Stuttgart

  • Private Nachricht senden

1

07.11.2007, 03:07

Problem bei Erweiterung Spiel Kapitel12 Explosionsanimation

Howdy, ich bin am erweitern von dem Spiel in Kapitel12. Folgendes Problem zerbricht mir gerade den Kopf.

Nach dem der Laser einen Asteroiden getroffen hat, werden beide deaktiviert und an deren Position eine Explosionsanimation erzeugt. Das Spiel läuft dann auch eine ganze Weile ohne Probleme. Diese Weile hängt damit zusammen wie schnell die Explosionsanimation also wie groß der Wert von m_fAnimPhaseE ist.

Irgendwann (ca nach 3 Minuten bei: m_fAnimPhaseE += 15.0f * g_pTimer->GetElapsed ();) tauchen auf ein mal Explosionen am Bildschirm an verschiedenen Positionen auf, verschwinden wieder, tauchen wieder auf...

Was mich wundert ist das das ganze erst nach einer Weile geschieht. Die Liste für die Explosionen müsste eigentlich funktionieren, durchläuft wie es soll beginn->ende, löscht die nicht mehr gebrauchten Explos. Es sollten also eigentlich nirgends mehr alte Explionen gespeichert sein..

Vielleicht hat ja einer von euch eine Idee :idea: , unten ist mal etwas Codeschnipsel, denke das es irgendwie an diesem liegt, sonnst muss ich an anderer Stelle weitersuchen... :(

Mit: m_fAnimPhaseE += 8.0f * g_pTimer->GetElapsed ();
scheint es zu funktionieren aber die Animation ist viel zu langsam, wie bekommt man diese schneller ohne oben genanntes Problem zu erhalten(?)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        // Sprite für Explosion laden in Klasse CGame


    m_pSpriteExplosion = new CSprite;
    m_pSpriteExplosion->Load ("Data/Explosion.bmp", 16, 64, 64);
    m_pSpriteExplosion->SetColorKey (255, 0, 255);

       // Funktion UpdateE in Klasse CAstroid - Explosion update


      void CAsteroid::UpdateE ()
      {  // Animieren

      m_fAnimPhaseE += 15.0f * g_pTimer->GetElapsed ();

     // Prüfen, ob die Animation am Ende angelangt ist, wenn ja dann deaktivieren

  if (m_fAnimPhaseE >= 16.0f)
         m_bIsAliveE = false;
} // Update Explosion


[/code]

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

07.11.2007, 08:54

Naja es ist ganz einfach:

Stell dir vor du bist ein PC und du kannst nur von 0 bis 1000 zählen. So. Dein Meister gibt dir nun den Auftrag pro Sekunde 10 Auf den Zähler drauf zu zählen. Du fängst also an: 10, 20, 30, ...., 510, 520, ... 960,970,980,990,1000....ohhhh mist? Was nun? Ich kann ja nur bis 1000 zählen...naja ich fange einfach bei 0 wieder an. Wird schon keiner merken....

Oder etwas professioneller gesagt:

http://de.wikibooks.org/wiki/C++-Programmierung:_Einf%C3%BChrung_in_C++:_Variablen,_Konstanten_und_ihre_Datentypen#Ganzzahlen

Da so unten zum Thema "Überlauf".

Grüße Nox :D
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

pushback

Frischling

  • »pushback« ist der Autor dieses Themas

Beiträge: 2

Wohnort: Stuttgart

  • Private Nachricht senden

3

07.11.2007, 17:29

Danke für die kompetente Antwort. Ich hatte viel zu kompliziert gedacht. Funktioniert jetzt alles Super, tolles Buch!
closed.

Werbeanzeige