我一直在使用Xcode的Macbook上使用SDL2一点点,我很高兴。最近我试图收到一个焦点丢失的事件,但它没有工作。经过一些修补,我发现没有收到窗口事件,除了窗口事件的类型为512,每秒随机间隔显示2-5次。 WindowEventID
是枚举,而不是十六进制格式,所以它不应该是一些十六进制数。我在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);
}
答案 0 :(得分:9)
您需要检查event.window.event
而不是event.window.type
,因为类型更通用并且有一些其他用法(代码512与SDL_WINDOW_INPUT_FOCUS相关,并且无论何时将光标移动到窗口或从窗口移动它都会触发)。所以你的代码可能是这样的:
while(SDL_PollEvent(&event)) {
switch(event.type)
{
case SDL_WINDOWEVENT:
switch(event.window.event)
{
case SDL_WINDOWEVENT_ENTER:
cout << "entered" << endl;
break;
case SDL_WINDOWEVENT_LEAVE:
cout << "left" << endl;
break;
}
break;
case SDL_KEYDOWN:
cout << "key pressed: " << event.key.keysym.sym << endl;
break;
}
}