c - SDL 创建窗口不在 Mac os X 上创建窗口
问题描述
我正在关注SDL 上的Lazy Foo 教程。
使用二进制文件创建窗口SDL_WINDOW_SHOWN
并运行时,会出现菜单栏,但窗口不会出现。需要一些关于我可以做些什么来进一步调试的方向。
我也尝试过手动设置窗口位置,但没有运气。
SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
SDL_CreateWindow("SDL Tutorial", 100, 100, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
一切都成功编译并且SDL_GetError()
不会产生任何错误。我登录到一个文件来确认。
#include <SDL2/SDL.h>
#include <stdio.h>
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main(int argc, const char * argv[]) {
FILE *log_file;
log_file = fopen("log.log", "a+");
//The window we'll be rendering to
SDL_Window* window = NULL;
//The surface contained by the window
SDL_Surface* screenSurface = NULL;
//Initialize SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0 )
{
fprintf(log_file, "SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
}
else
{
//Create window
window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if (window == NULL)
{
fprintf(log_file, "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);
fprintf(log_file, "SDL_Error: %s\n", SDL_GetError());
//Wait two seconds
SDL_Delay(2000);
}
}
//Destroy window
SDL_DestroyWindow(window);
//Quit SDL subsystems
SDL_Quit();
return 0;
}
解决方案
它不起作用的原因是因为我没有设置事件循环。
我是关于如何画线的文档并在那里得到了一个例子。
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
done = SDL_TRUE;
}
}
推荐阅读
- javascript - 多表过滤器
- apache-spark - 带有 efs 的火花结构流式传输导致工作延迟
- mysql - ER_ACCESS_DENIED_ERROR:当我尝试连接到远程服务器上的数据库时 - Node.js
- javascript - 我想制作一个日期选择器(日历)来根据时间戳过滤我的数据库记录(Laravel 6)
- javascript - VS Code 中的 Object.prototype 提示
- css - 如何获取像素值或窗口 x/y 位置以根据这些坐标设置样式?
- database - 如何在 ER 图中显示产品只能购买一次?
- reactjs - 在 react-router 中传递 props 时,是否将 {...rest} 中的属性传递给 {routeProps}?
- java - 如何在我的 Spring 应用程序中解决此异常?
- python - 如何解决 subprocess.run() 执行错误?