【发布时间】:2013-08-26 23:20:09
【问题描述】:
我已经在我的 Macbook 和 Xcode 上使用 SDL2 有一段时间了,我很高兴。最近我试图接收一个焦点丢失事件,但它不起作用。经过一番修补,我发现没有收到任何窗口事件,除了一个类型为 512 的窗口事件,它以随机间隔每秒显示 2-5 次。 WindowEventIDs 是一个枚举,而不是十六进制格式,所以它不应该是一些十六进制数字。我在 SDL2 框架中搜索了 512,但一无所获。其他事件,如 SDL_QUIT 和 SDL_KEYDOWN 工作得很好。有人知道怎么回事吗?
这是我的事件循环:
SDL_Event event;
bool running = false;
while(running) {
while(SDL_PollEvent(&event)) {
if(event.type == SDL_QUIT)
running = false;
else if(event.type == SDL_KEYDOWN) {
cout << event.key.type << endl;
}
else if(event.type == SDL_WINDOWEVENT) {
cout << event.window.type << endl;
}
}
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
【问题讨论】:
-
while(SDL_PollEvent(&event)) {}会消耗大量 CPU。这是一个非阻塞操作,当没有事件时会一直返回 false。 -
当 SDL_PollEvent 第一次返回 false 时,while 循环将退出。