我的图片似乎正常加载但是 除非我将控制台窗口拖到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;
}
有人可以对此有所了解吗?
答案 0 :(得分:1)
根据你的代码判断,你正在翻转错误的表面:
SDL_Flip(currentGameState->GetWallpaper());
您应该将SDL_Flip()
指针传递给当前视频(显示)表面,通常是您通过调用SDL_SetVideoMode()
获得的指针。在你的情况下似乎是displayWindow_
。
顺便说一句 - 您观察到的行为可以通过SDL_Flip() documentation的引用来解释:
当重绘SDL窗口的某些部分时,软件屏幕表面也会自动更新,这是由窗口重叠或从图标化状态恢复造成的。