为什么 mac os sdl2 程序 window 没有响应?
Why mac os sdl2 program window is not responding?
我刚刚在我的 mac 上设置了 SDL2 框架,但是编译和 运行 程序成功了,window 没有响应(我复制了创建一些矩形的代码).
我使用 xcode 并按照此处的教程进行操作 http://lazyfoo.net/tutorials/SDL/01_hello_SDL/mac/xcode/index.php
循序渐进。
SDL_Window* window = NULL;
//The surface contained by the window
SDL_Surface* screenSurface = NULL;
//Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
}
else
{
//Create window
window = SDL_CreateWindow( "SDL Tutorial", 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() );
}
else
{
//Get window surface
screenSurface = SDL_GetWindowSurface( window );
//Fill the surface white
SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) );
//Update the surface
SDL_UpdateWindowSurface( window );
cout << " Ok" << endl;
//Wait two seconds
SDL_Delay( 20000 );
}
}
//Destroy window
SDL_DestroyWindow( window );
//Quit SDL subsystems
SDL_Quit();
return 0;
为什么会出现这种问题?
提前谢谢你
为了将 SDL 编写到 "respond" 的程序提供给操作系统,您应该将控制权交还给 SDL,以便它处理系统消息并将它们作为 SDL 事件(鼠标事件、键盘事件)交还给您等等)。
为此,您必须添加一个使用 SDL_PollEvent
的循环,看起来应该像
while(true)
{
SDL_Event e;
while (SDL_PollEvent(&e))
{
// Decide what to do with events here
}
// Put the code that is executed every "frame".
// Under "frame" I mean any logic that is run every time there is no app events to process
}
您需要处理一些特殊事件,例如 SDL_QuiEvent
,才能关闭您的应用程序。如果你想处理它,你应该修改你的代码看起来像这样:
while(true)
{
SDL_Event e;
while (SDL_PollEvent(&e))
{
if(e.type == SDL_QUIT)
{
break;
}
// Handle events
}
// "Frame" logic
}
我刚刚在我的 mac 上设置了 SDL2 框架,但是编译和 运行 程序成功了,window 没有响应(我复制了创建一些矩形的代码).
我使用 xcode 并按照此处的教程进行操作 http://lazyfoo.net/tutorials/SDL/01_hello_SDL/mac/xcode/index.php 循序渐进。
SDL_Window* window = NULL;
//The surface contained by the window
SDL_Surface* screenSurface = NULL;
//Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
}
else
{
//Create window
window = SDL_CreateWindow( "SDL Tutorial", 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() );
}
else
{
//Get window surface
screenSurface = SDL_GetWindowSurface( window );
//Fill the surface white
SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) );
//Update the surface
SDL_UpdateWindowSurface( window );
cout << " Ok" << endl;
//Wait two seconds
SDL_Delay( 20000 );
}
}
//Destroy window
SDL_DestroyWindow( window );
//Quit SDL subsystems
SDL_Quit();
return 0;
为什么会出现这种问题? 提前谢谢你
为了将 SDL 编写到 "respond" 的程序提供给操作系统,您应该将控制权交还给 SDL,以便它处理系统消息并将它们作为 SDL 事件(鼠标事件、键盘事件)交还给您等等)。
为此,您必须添加一个使用 SDL_PollEvent
的循环,看起来应该像
while(true)
{
SDL_Event e;
while (SDL_PollEvent(&e))
{
// Decide what to do with events here
}
// Put the code that is executed every "frame".
// Under "frame" I mean any logic that is run every time there is no app events to process
}
您需要处理一些特殊事件,例如 SDL_QuiEvent
,才能关闭您的应用程序。如果你想处理它,你应该修改你的代码看起来像这样:
while(true)
{
SDL_Event e;
while (SDL_PollEvent(&e))
{
if(e.type == SDL_QUIT)
{
break;
}
// Handle events
}
// "Frame" logic
}