SDL window 在启动时关闭并且 returns 0
SDL window closes on startup and returns 0
我一启动程序,window 就关闭了。这是主要功能:
int main(int argc, char* argv[])
{
if (!init())
{
printf("Could not initialize!");
}
else
{
bool quit = false;
SDL_Event ev;
while(!quit)
{
while(SDL_PollEvent(&ev))
{
if(ev.type = SDL_QUIT)
{
quit = true;
}
}
}
}
close();
return 0;
}
添加 printf() 语句将其缩小到此部分
while(SDL_PollEvent(&ev))
{
if(ev.type = SDL_QUIT)
{
quit = true;
}
}
如果我将 while(SDL_PollEvent(&ev))
更改为 while(!SDL_PollEvent(&ev))
或 while(SDL_PollEvent(&ev) != 0)
window 保持打开状态,但只要我将鼠标悬停在它上面或尝试移动它就会关闭。
the SDL documentation
说 SDL_PollEvent
只有 returns 1 (true) 如果有未决事件,并且由于程序 returns 0 似乎 SDL_PollEvent
必须以某种方式返回 1 而且ev.type
被设置为 SDL_QUIT
而没有单击 X 按钮,我认为这不太可能。所以我可能做错了什么,但我无法弄清楚它是什么,我一直在努力寻找解决方案。
此外,这里是 init() 函数。
bool init()
{
bool success = true;
if( SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf("SDL failed to initialize! SDL Error: %s\n", SDL_GetError());
success = false;
}
else
{
window = SDL_CreateWindow("Image Encrypter", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if(window == NULL)
{
printf("Window could not be created! SDL Error: %s\n", SDL_GetError());
success = false;
}
else
{
screenSurface = SDL_GetWindowSurface(window);
if(screenSurface == NULL)
{
printf("Screen surface could not be created! SDL Error: %s\n", SDL_GetError());
}
}
}
return success;
}
控制台没有输出任何 init() 函数中的 printf 语句,所以我认为这不是问题所在。
此处常见错误:
if(ev.type = SDL_QUIT)
- 这是赋值,不是比较。你的代码的第一个版本应该可以工作。
我一启动程序,window 就关闭了。这是主要功能:
int main(int argc, char* argv[])
{
if (!init())
{
printf("Could not initialize!");
}
else
{
bool quit = false;
SDL_Event ev;
while(!quit)
{
while(SDL_PollEvent(&ev))
{
if(ev.type = SDL_QUIT)
{
quit = true;
}
}
}
}
close();
return 0;
}
添加 printf() 语句将其缩小到此部分
while(SDL_PollEvent(&ev))
{
if(ev.type = SDL_QUIT)
{
quit = true;
}
}
如果我将 while(SDL_PollEvent(&ev))
更改为 while(!SDL_PollEvent(&ev))
或 while(SDL_PollEvent(&ev) != 0)
window 保持打开状态,但只要我将鼠标悬停在它上面或尝试移动它就会关闭。
the SDL documentation
说 SDL_PollEvent
只有 returns 1 (true) 如果有未决事件,并且由于程序 returns 0 似乎 SDL_PollEvent
必须以某种方式返回 1 而且ev.type
被设置为 SDL_QUIT
而没有单击 X 按钮,我认为这不太可能。所以我可能做错了什么,但我无法弄清楚它是什么,我一直在努力寻找解决方案。
此外,这里是 init() 函数。
bool init()
{
bool success = true;
if( SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf("SDL failed to initialize! SDL Error: %s\n", SDL_GetError());
success = false;
}
else
{
window = SDL_CreateWindow("Image Encrypter", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if(window == NULL)
{
printf("Window could not be created! SDL Error: %s\n", SDL_GetError());
success = false;
}
else
{
screenSurface = SDL_GetWindowSurface(window);
if(screenSurface == NULL)
{
printf("Screen surface could not be created! SDL Error: %s\n", SDL_GetError());
}
}
}
return success;
}
控制台没有输出任何 init() 函数中的 printf 语句,所以我认为这不是问题所在。
此处常见错误:
if(ev.type = SDL_QUIT)
- 这是赋值,不是比较。你的代码的第一个版本应该可以工作。