奇怪的SDL blitting行为

时间:2012-09-08 12:26:59

标签: c++ sdl

我的图片似乎正常加载但是 除非我将控制台窗口拖到SDL显示屏上,否则实际上不会显示。 只有控制台窗口重叠的SDL显示部分才会显示,所以我可以 基本上使用控制台窗口“绘制”图像,然后停留。

#include "SDL.h"

class Game 

   private:
      SDL_Surface* displayWindow_;
//Rest of class

};

关键功能是:(注意GetWallpaper()返回有效指针)

void Game::Render(){
   GameState* currentGameState = gameStateManager_->GetCurrentState();
   if(currentGameState)
   {
      surface::Draw(currentGameState->GetWallpaper(), displayWindow_, 0, 0);
      SDL_Flip(currentGameState->GetWallpaper());
   }
       return;
}

最后

bool surface::Draw(SDL_Surface* sourceSurface, SDL_Surface* targetSurface,
                   int x, int y){
   if(sourceSurface == NULL || targetSurface == NULL)
      return false;

   SDL_Rect targetRectangle;

   targetRectangle.x = x;
   targetRectangle.y = y;

   SDL_BlitSurface(sourceSurface, NULL, targetSurface, &targetRectangle);

   return true;
}

有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:1)

根据你的代码判断,你正在翻转错误的表面:

SDL_Flip(currentGameState->GetWallpaper());

您应该将SDL_Flip()指针传递给当前视频(显示)表面,通常是您通过调用SDL_SetVideoMode()获得的指针。在你的情况下似乎是displayWindow_

顺便说一句 - 您观察到的行为可以通过SDL_Flip() documentation的引用来解释:

  

当重绘SDL窗口的某些部分时,软件屏幕表面也会自动更新,这是由窗口重叠或从图标化状态恢复造成的。