 |
JLI Spieleprogrammierung
|
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
|
Verfasst am: 16.11.2003, 19:19 Titel: Sprite-Animation |
|
|
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 |
|
 |
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 16.11.2003, 20:10 Titel: Re: Sprite-Animation |
|
|
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 |
|
 |
HotAcid Super JLI'ler

Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 17.11.2003, 09:46 Titel: |
|
|
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 [/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 |
|
 |
HotAcid Super JLI'ler

Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 17.11.2003, 12:14 Titel: |
|
|
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
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 |
|
 |
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 17.11.2003, 17:20 Titel: |
|
|
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 |
|
 |
HotAcid Super JLI'ler

Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 17.11.2003, 18:44 Titel: |
|
|
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...
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 |
|
 |
|
|
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
|