【发布时间】:2015-07-22 19:06:32
【问题描述】:
所以我希望这段代码创建一个带有图像的窗口(hello world),然后使用 SDL2、Visual Studio 和 c++ 在 5 秒后退出。我认为它应该足够简单。我写了代码,当我构建它时没有错误,但问题是窗口在创建后立即退出。我最初认为添加 SDL_Delay(5000) 会产生预期的效果,但我想它不会那样工作。谁能告诉我这是为什么?
#include <SDL.h>
#include <iostream>
bool init();
bool load_media();
void close();
const int s_height = 300;
const int s_width = 400;
SDL_Window* new_window = NULL;
SDL_Surface* new_surface = NULL;
SDL_Surface* new_image = NULL;
using namespace std;
bool init()
{
bool success = true;
if (SDL_Init(SDL_INIT_VIDEO) < 0)
{
cout << "couldn't initialize" << endl;
success = false;
}
else
{
new_window = SDL_CreateWindow(
"SDL Tutorial 2",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
s_width,
s_height,
SDL_WINDOW_SHOWN);
if (new_window == NULL)
{
cout << "there's no window" << endl;
success = false;
}
else
{
new_surface = SDL_GetWindowSurface(new_window);
}
}
return success;
}
bool load_media()
{
bool success = true;
new_image = SDL_LoadBMP("SDL Tutorial 2/hello_world.bmp");
if (new_image == NULL)
{
cout << "couldn't load image" << endl;
success = false;
}
return success;
}
void close()
{
SDL_FreeSurface(new_image);
SDL_DestroyWindow(new_window);
SDL_Quit;
}
int main(int argc, char *argv[])
{
if (!init())
{
cout << "FAILED to Initialize!" << endl;
if (!load_media())
{
cout << "FAILED to Load Media!" << endl;
}
else
{
SDL_BlitSurface(new_image, NULL, new_surface, NULL);
SDL_UpdateWindowSurface(new_window);
SDL_Delay(5000);
SDL_Quit;
}
}
close();
return 0;
}
【问题讨论】:
-
这段代码编译没有警告? SDL_Quit 没有括号。
-
没错,这段代码编译没有任何错误
-
也许你在编译时没有任何警告,但是 SDL_Quit;是一个没有效果的简单声明。此外,如果它被正确调用,你会调用它两次,这是不好的(一次在
main中,第二次在close函数中)。最后一件事:close不是一个好名字的函数,因为标准库中有同名的函数。 -
您在 main 中的“else”似乎在错误的位置。当前代码只会在初始化失败时调用
SDL_Delay。写if(!...)似乎会使代码复杂化;尝试使用积极的ifs 和使用elses。
标签: c++ visual-studio window sdl-2