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
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void CSprite::Load (const string sFilename,int NumFrames,int FrameWidth , int FrameHeight) { Load (sFilename); m_NumFrames =NumFrames; m_FrameWidth = FrameWidth; m_FrameHeight = FrameHeight; m_FrameRect.w = FrameWidth; m_FrameRect.h = FrameHeight; m_NumFramesX = m_pImage->w /m_FrameWidth; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void CSprite::Render(float fFrameNumber) { int Spalte = static_cast<int> (fFrameNumber)%m_NumFramesX; int Zeile= static_cast<int> (fFrameNumber)%m_NumFramesX; m_FrameRect.x = Spalte * m_FrameWidth; m_FrameRect.y =Zeile *m_FrameHeight; SDL_BlitSurface (m_pImage,&m_FrameRect,m_pScreen,&m_Rect); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
void CGame::GameRun() { while(m_bGameRun) { g_pFramework->Clear (); g_pFramework->Update (); m_pBackground->Render (); timer +=g_pTimer->GetElapsed (); if (timer >= 1.0) { frame +=1; if(frame > 2) frame=0; timer =0.0; } cout<<frame<<endl; m_pAni->Render(2); g_pFramework->Flip (); } } |
C-/C++-Quelltext |
|
1 |
int Zeile= static_cast<int> (fFrameNumber)%m_NumFramesX; |
C-/C++-Quelltext |
|
1 |
int Zeile= static_cast<int> (fFrameNumber) / m_NumFramesX; |
C-/C++-Quelltext |
|
1 |
m_Ani->Render(frame) |
Zitat von »"Errschaffer"«
Nein funktioniert auch nicht so ganz. Jetzt zeigt er IMMER nur den ersten Frame. Das +1 ist ja unnötig das ich ja bei 0 anfange zu zählen.
0=1.
Zitat
Ich versteh das nicht. Es muss doch gehen. Ist doch der gleiche Code wie im Buch.
C-/C++-Quelltext |
|
1 |
std::cout << "timer:" << timer << "\t frame: " << frame << std::endl; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
if (timer >= 1.0) { frame += 1; if(frame > m_pAni->m_NumFrames) // oder halt eine getNumFrames definieren frame=0.0f; timer =0; } |
Zitat von »"Errschaffer"«
Über die Konsole wird alles korrekt ausgegeben. Ich versteh das nicht
Zitat von »"Errschaffer"«
Damit wird der Tastaturstatus und der Timer aktuallisiert.
Zitat von »"Errschaffer"«
Hier ich hab dir mal das ganze Projekt hochgeladen.
http://errschaffer.bplaced.net/Download/AnimationsTool.rar
Zitat
void CSprite::Render(float fFrameNumber)
{
int Spalte = static_cast<int> (fFrameNumber)%m_NumFramesX;
int Zeile= static_cast<int> (fFrameNumber) / m_NumFramesX; // <- hier muss geteilt werden
m_FrameRect.x = Spalte * m_FrameWidth;
m_FrameRect.y =Zeile *m_FrameHeight;
SDL_BlitSurface (m_pImage,&m_FrameRect,m_pScreen,&m_Rect);
Werbeanzeige