2016-07-31 7 views
-2

Ich versuche SDL (C++) zu verwenden, um eine Animation für ein Bild (320width, 64height) mit 64 × 64 pro Frame zu erstellen.Animation nicht korrekt in SDL (C++)?

Mein Problem ist, dass mein ganzes Bild (320 × 64) im 64 × 64-Raum gequetscht wurde, anstatt pro Bild gezeigt.

Ich habe eine AnimatedSprite Klasse für die Animation mit der Methode draw()

AnimatedSprite::Draw(BackBuffer& backbuffer) 
{ 
//set frame width 
this->SetFrameWidth(64); 

//set x coordinate 
this->SetX(frameCoordinateContainer[m_currentFrame-1]); 

backbuffer.DrawAnimatedSprite(*this); 
} 

Verfahren DrawAnimatedSprite so ist,

void BackBuffer::DrawAnimatedSprite(AnimatedSprite& animatedSprite) 
{ 
SDL_Rect fillRect; 
fillRect.x = animatedSprite.GetX(); 
fillRect.y = animatedSprite.GetY(); 
fillRect.w = animatedSprite.getFrameWidth(); 
fillRect.h = animatedSprite.GetHeight(); 
SDL_RenderCopy(m_pRenderer, animatedSprite.GetTexture()->GetTexture(), 0, &fillRect); 
} 

Also habe jemand eine Idee, wo könnte falsch sein? Danke!

Antwort

1

Das Problem ist in der Tat mit der Art, wie Sie SDL_RenderCopy verwenden, aber Sie sollten ein srcrect und ein dstrect auch zur Verfügung stellen, ist eins das Ziel, das Ihr Bild gerendert werden soll und das andere ist, welcher Teil Ihrer Textur Sie wollen dort wiedergegeben werden.

Zum Beispiel, wenn Ihr Blatt Sprite ist (320 × 64) mit einer Sprite-Größe (64x64) und Sie möchten an den Koordinaten (x, y) Ihrer fillRect das erste Bild auf dem Bildschirm drucken, sollten Sie tun etwas wie dieses:

SDL_Rect clip; 
clip.x = 0; 
clip.y = 0; 
clip.w = 64; 
clip.h = 64; 

SDL_Rect fillRect; 
fillRect.x = animatedSprite.GetX(); 
fillRect.y = animatedSprite.GetY(); 
fillRect.w = animatedSprite.getFrameWidth(); 
fillRect.h = animatedSprite.GetHeight(); 

SDL_RenderCopy(m_pRenderer, animatedSprite.GetTexture()->GetTexture(), &clip, &fillRect); 

Hoffe, dass dies hilft.

1

SDL_RenderCopy:

int SDL_RenderCopy(SDL_Renderer* renderer, 
        SDL_Texture* texture, 
        const SDL_Rect* srcrect, 
        const SDL_Rect* dstrect) 

Sie vorbei fillRect-dstrect, nicht srcrect.

+0

Sorry, dass ich nicht ganz verstehe, also wie soll ich es verbessern? @LogicStuff – Wilheim

+0

Versuchen Sie, '0' mit' & fillRect' zu vertauschen. – LogicStuff

+0

Ich tausche '0' mit' & fillRect', aber dann wird nichts da sein. @LogicStuff – Wilheim