C++ 在C++/SDL2

C++ 在C++/SDL2,c++,sdl-2,C++,Sdl 2,我在SDL窗口中显示图像时遇到问题,我不太确定我做错了什么。代码编译得很好,并且图像已与my.exe一起放置在调试文件夹中,因此我不确定它为什么不显示。有什么我可能错过的小东西吗 #include <iostream> #include <stdio.h> #include <SDL.h> #undef main using namespace std; const int screenWidth = 640; const int screenHeight

我在SDL窗口中显示图像时遇到问题,我不太确定我做错了什么。代码编译得很好,并且图像已与my.exe一起放置在调试文件夹中,因此我不确定它为什么不显示。有什么我可能错过的小东西吗

#include <iostream>
#include <stdio.h>
#include <SDL.h>
#undef main

using namespace std;

const int screenWidth = 640;
const int screenHeight = 480;

int main(int argc, char* args[]) {

SDL_Window* window = SDL_CreateWindow("Game", SDL_WINDOWPOS_UNDEFINED, 
SDL_WINDOWPOS_UNDEFINED, screenWidth, screenHeight, SDL_WINDOW_SHOWN);
SDL_Surface* image = SDL_LoadBMP("image.bmp");
SDL_Renderer* render = SDL_CreateRenderer(window, -1, 0);
SDL_Texture* texture1 = SDL_CreateTextureFromSurface(render, image);

SDL_RenderCopy(render, texture1, NULL, NULL);
SDL_RenderPresent(render);

SDL_UpdateWindowSurface(window);

SDL_Delay(5000);

SDL_DestroyTexture(texture1);
SDL_DestroyRenderer(render);
SDL_FreeSurface(image);
SDL_DestroyWindow(window);

SDL_Quit();
return 0;
}
#包括
#包括
#包括
#未定义主
使用名称空间std;
常数int屏幕宽度=640;
常数int屏幕高度=480;
int main(int argc,char*args[]{
SDL_Window*Window=SDL_CreateWindow(“游戏”),SDL_WINDOWPOS_未定义,
SDL_窗口位置未定义、屏幕宽度、屏幕高度、显示的SDL_窗口);
SDL_Surface*image=SDL_LoadBMP(“image.bmp”);
SDL_Renderer*render=SDL_CreateRenderer(窗口,-1,0);
SDL_纹理*texture1=SDL_CreateTextureFromSurface(渲染,图像);
SDL_渲染复制(渲染,纹理1,空,空);
SDL_RenderPresent(渲染);
SDL_更新内表面(窗口);
SDL_延迟(5000);
SDL_破坏纹理(纹理1);
SDL_渲染器(渲染);
SDL_自由曲面(图像);
SDL_窗口(窗口);
SDL_退出();
返回0;
}

如果在调试器中单步执行代码,并检查 在每个步骤中返回值,您是否得到意外的结果? 例如空指针。这可能会对你有所帮助 缩小范围

图像已与my.exe一起放置在调试文件夹中

如果从IDE运行,则当前工作文件夹将运行
作为项目文件夹

图像的值是多少?如果为空,那么
SDL\u GetError()
会说什么?相对路径是相对于当前工作目录的,而不是“.exe文件夹”,这可能是完全不同的事情。删除
SDL\u UpdateWindowSurface
,因为您已经在使用渲染器,并且无法将曲面与其组合。最后但并非最不重要的一点是,至少对窗口事件进行渲染循环和重画(或者更简单地说,无条件重画);只画一次&睡觉不是一种显示东西的方式。在Linux上,您的代码可以正常工作,正如@keltar所写的那样,应该会有所帮助。可能是图像文件格式的东西?最小可运行工作PNG示例:将很容易适应bmp,因为文档说它是受支持的:谢谢!问题是它应该放在项目所在的文件夹中。