c++ - 无法使用 SDL_LoadBMP 加载图像

标签 c++ sdl sdl-2

我对 SDL1.2 的经验非常有限,我也在尝试迁移到 SDL2.0。 这是一个简单的井字游戏,下面的类在初始化时加载我的图像。我无法准确指出我的问题,但我得到了代码为 -1 的退出,因为它无法加载我的位图。我想要的结果是返回 TRUE。 代码最初来自http://www.sdltutorials.com/sdl-tutorial-tic-tac-toe但我为迁移到 SDL2.0 做了一些更改。

bool CApp::OnInit() {

if(SDL_Init(SDL_INIT_EVERYTHING) < 0) { return false; }

SDL_CreateWindowAndRenderer(600, 600, SDL_WINDOW_RESIZABLE, &sdlWindow, &sdlRenderer);

if((Surf_Grid = CSurface::OnLoad("./gfx/grid.bmp")) == NULL) { return false; }
if((Surf_O = CSurface::OnLoad("./gfx/o.bmp")) == NULL) { return false; }
if((Surf_X = CSurface::OnLoad("./gfx/x.bmp")) == NULL) { return false; }

Reset();

return true;}

我认为问题出在 CSurface::Onload() 上,所以我在函数中插入了一个断点,但项目没有到达我的断点就跑完了。好像没有调用CSurface::Onload()函数。

CSurface::Onload():

SDL_Surface* CSurface::OnLoad(char* File) {
SDL_Surface* Surf_Temp = NULL;
SDL_Surface* Surf_Return = NULL;

if((Surf_Temp = SDL_LoadBMP(File)) == NULL) { return NULL; }

Surf_Return = SDL_ConvertSurfaceFormat(Surf_Temp,SDL_PIXELFORMAT_UNKNOWN,0);    /* OUTDATED SDL 1.2 : Surf_Return = SDL_DisplayFormat(Surf_Temp); */
SDL_FreeSurface(Surf_Temp);
return Surf_Return;}

知道我在这里做错了什么吗???

最佳答案

花了一些时间,但最终发现问题出在函数 SDL_ConvertSurfaceFormat() 的像素格式字段上 我几乎不知道这些字段是什么意思,但只需使用 SDL_PIXELFORMAT_ARGB8888 即可解决问题

http://wiki.libsdl.org/SDL_ConvertSurfaceFormat

已解决。 =)

关于c++ - 无法使用 SDL_LoadBMP 加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20034481/

相关文章:

c++ - 什么是 SDL_Joystick,什么是 SDL_GameController?两者之间有什么关系?

c++ - C++多线程错误: no matching function for call to 'std::thread::thread(<unresolved overloaded function type>

c++ - 如何使 clang-format 11 在可变参数模板声明后放置一个空格

c++ - 编译时大小未知的数组类的实例化

c++ - 如何在二维粒子系统中实现方向?

c - 在 C 中使用 SDL2 进行编译时出现问题

c++ - Boost Spirit - 跳过键值对之间不需要的行

c++ - Python 和 pygame 是学习 SDL 的好方法吗?

opengl - 在 SDL 2 中使用 OpenGL 有什么好处?

Ubuntu 中的 C 和 SDL 未按预期工作