Я немного использовал SDL2 на своем Macbook с Xcode, и я очень доволен. В последнее время я пытался получить событие потерянного фокуса, но оно не работало. После некоторой обработки я обнаружил, что никакие оконные события не были получены, кроме оконного события, которое имело тип 512, которое появлялось 2-5 раз в секунду через случайные интервалы. WindowEventID
s в перечислении, а не в шестнадцатеричном формате, поэтому это не должно быть какое-то шестнадцатеричное число. Я запустил поиск по платформе 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);
}
Вам нужно проверить 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;
}
}
Других решений пока нет …