JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Sprite-Animation

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 16.11.2003, 19:19    Titel: Sprite-Animation Antworten mit Zitat

Hi,

folgendes Problem:

habe die Methode CSprite::animate() aus JLI2 wie folgt abgeändert:
Code:
void CSprite::Animate(BOOL reverse)
{
    int Framerate = m_ResManager->GetFramerate();
   
   if (m_reverse)
   {
      // m_CurrentImage in Abhängigkeit der Framerate erhöhen
      m_CurrentImage -= m_AnimationSpeed / (float)Framerate;
   }
   else
   {
      // m_CurrentImage in Abhängigkeit der Framerate erhöhen
      m_CurrentImage += m_AnimationSpeed / (float)Framerate;
   }
    // wenn ja, nächste Grafik (Textur) verwenden
    if(m_CurrentImage > m_AnimationVec.size())
    {
      if(reverse)
      {
         m_reverse = TRUE;
         m_CurrentImage--;
      }
      else
      {
         m_CurrentImage = 0;
      }
        m_PlayedAnimation = TRUE;
    }
   else if(m_CurrentImage < 0)
   {
      m_reverse = FALSE;
      m_CurrentImage++;
      m_PlayedAnimation = TRUE;
   }
}


wobei der Parameter "reverse" anzeigt, ob die Animation immer wieder von vorne abgespielt werden soll oder als "Jojo-Effekt" (1-2-3-4-3-2-1..)

mit Aufruf von sprite.animate(FALSE) gibt es keine Probleme, nur mit dem Parameter TRUE gibt folgendes:
das Ganze funktioniert auch für animierte Sprites, aber wenn ich in meiner liste auch Sprites habe, die nur eine Textur haben (also keine Animation), dann stürzt das Programm ab, ich sehe das Bild ganz kurz, dann ist es weg...

Ideen?
cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 16.11.2003, 20:10    Titel: Re: Sprite-Animation Antworten mit Zitat

m_CurImage bleibt ja nie =0...ich würde wie Christian die boolsche Variable m_bAnimating setzen, und gar nichts tun, wenn es kein animiertes sprite ist.

edit: wenn du alles so lassen willst, müsste es funktionieren, wenn du statt...
Code:

   else if(m_CurrentImage < 0)
   {
      m_reverse = FALSE;
      m_CurrentImage++;
      m_PlayedAnimation = TRUE;
   }

Code:

   else if(m_CurrentImage < 0)
   {
      m_reverse = FALSE;
      m_CurrentImage = 0.0f;
      m_PlayedAnimation = TRUE;
   }

...schreibst. Is mit der Variablen aber sicher eleganter.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 17.11.2003, 09:46    Titel: Antworten mit Zitat

wie meinst du dass mit der Variable m_bAnimating? Wo soll denn darüber was stehen?

Anderes Problem: prinzipiell funktioniert das ganze jetzt, aber...

nach einer unbestimmten Zeit stürzt mein Progamm immer noch ab, geht also einfach zurück zu VC++, das ist manchmal nach einem Sekundenbruchteil, manchmal aber auch erst nach ein oder zwei Minuten...ich mache dabei überhaupt nichts außer zu warten...

[edit]es scheint so zu sein, dass das Programm beim ersten Aufruf (nach dem Start von VC++) sich sehr schnell beendet, bei den weiteren Versuchen sich dann aber deutlich mehr Zeit lässt... die *.exe im debug-Verzeichnis verhält sich leider genauso Sad[/edit]

cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 17.11.2003, 12:14    Titel: Antworten mit Zitat

Der Fehler liegt mit Sicherheit an der animate()-Methode, wenn ich diese nicht aufrufe, gibt es keine Probleme, wenn ich sie wieder reinnehme, stürzt das Ding wieder ab Sad

cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 17.11.2003, 17:20    Titel: Antworten mit Zitat

hmm...war mir eigentlich sicher, dass das im Buch stand...egal:
Ich würd mir eine member variable bAnimatable gleich bei der Erstellung des Sprites setzen. In Animate() machst du dann einfach ein if (bAnimatable) {...} über den ganzen Code. Damit verhinderst du, dass m_CurrentImage verändert wird, wenn das Sprite gar keine Animation hat.

Wenn das Programm ohne Fehlermeldung aussteigt, liegt das fast immer daran, dass er eine Textur anspricht, die nicht existiert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 17.11.2003, 18:44    Titel: Antworten mit Zitat

vielleicht habe ich das auch nur überlesen oder so... in der Klasse CSprite ist das jedenfalls nicht drin...

aber es scheint jetzt zu funktionieren, vielen Dank!

melde mich bestimmt bald wieder... Wink

cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum