C++ 编译SDL测试时出错
我正在学习用SDL2编程。目前,我正在做一个基本的练习。我的程序加载一个背景图像,并在背景上加载一个完整的精灵表。但是我在执行程序时遇到了问题。当我执行二进制文件时,程序窗口立即自动关闭;我什么也看不见。我认为这是主循环的问题,但它看起来适合我。这是我的密码C++ 编译SDL测试时出错,c++,c,sdl,sdl-2,C++,C,Sdl,Sdl 2,我正在学习用SDL2编程。目前,我正在做一个基本的练习。我的程序加载一个背景图像,并在背景上加载一个完整的精灵表。但是我在执行程序时遇到了问题。当我执行二进制文件时,程序窗口立即自动关闭;我什么也看不见。我认为这是主循环的问题,但它看起来适合我。这是我的密码 #include "SDL.h" void main () { int gameover = 0; SDL_Init(SDL_INIT_VIDEO); SDL_Window* TheWindow; SDL_Renderer* R
#include "SDL.h"
void main () {
int gameover = 0;
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* TheWindow;
SDL_Renderer* RenderEngine;
SDL_Surface* LoadedSurface;
SDL_Surface* LoadedImage;
SDL_Texture* CharacterImg;
SDL_Texture* BackgroundImg;
TheWindow = SDL_CreateWindow("Character Test",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 580, SDL_WINDOW_RESIZABLE);
RenderEngine = SDL_CreateRenderer( TheWindow, -1, SDL_RENDERER_ACCELERATED);
LoadedSurface= SDL_LoadBMP("./maptest.bmp");
BackgroundImg = SDL_CreateTextureFromSurface( RenderEngine, LoadedSurface);
SDL_FreeSurface(LoadedSurface);
LoadedImage = SDL_LoadBMP("./sprite.bmp");
CharacterImg = SDL_CreateTextureFromSurface( RenderEngine, LoadedImage);
SDL_FreeSurface(LoadedImage);
SDL_Event event;
while (!gameover)
{
if (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
gameover = 1;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_ESCAPE:
case SDLK_q:
gameover = 1;
break;
}
}
break;
}
SDL_RenderClear(RenderEngine);
SDL_RenderCopy(RenderEngine, BackgroundImg, NULL, NULL);
SDL_RenderCopy(RenderEngine, CharacterImg, 120, 80);
SDL_RenderPresent(RenderEngine);
}
SDL_Quit();
}
如果发生任何
SDL\u PollEvent
事件,您的代码将退出while
-循环:
while (!gameover)
{
if (SDL_PollEvent(&event)) //Any SDL_PollEvent that gets into if...
{
switch (event.type)
{
case SDL_QUIT:
gameover = 1;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE:
case SDLK_q:
gameover = 1;
break;
}
}
break; //...will eventually hit this break if it didn't break before
}
SDL_RenderClear(RenderEngine);
SDL_RenderCopy(RenderEngine, BackgroundImg, NULL, NULL);
SDL_RenderCopy(RenderEngine, CharacterImg, 120, 80);
SDL_RenderPresent(RenderEngine);
}
如果您的程序运行,那么在编译过程中这不是一个错误。另外,您是否尝试过在关键点添加一些printf用于日志记录,然后从命令行运行它?这会让你得到更多的答案…是的,最后一次中断将使程序退出while循环。尽管如此,在创建/加载资源后,代码确实可以使用一些安全检查来检查NULL。注意EOF是如何清理的,这样问题就显而易见了。