Так что я хочу, чтобы этот код создавал окно с изображением на нем (hello world), а затем вышло после 5 секунд, используя SDL2, визуальную студию и C++. Я думал, что это должно быть достаточно просто. Я написал код, и когда я его построил, ошибок не было, однако проблема заключается в том, что окно завершается, как только оно создается. Я думал, что добавление 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;
}
Этот код компилируется без warnigs? SDL_Quit не имеет круглых скобок. – nsilent22
Это верно, этот код компилируется без ошибок –
Возможно, вы компилируете без каких-либо предупреждений, но SDL_Quit; просто утверждение без эффекта. Кроме того, если он был правильно вызван, вы бы назвали его дважды, что не очень хорошо (один раз в 'main', второй раз в' close'). Последнее: 'close' не является хорошим именем для функции, так как в стандартной библиотеке есть одна и та же именованная функция. – nsilent22