SDL2 не получает оконные события

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

3

Решение

Вам нужно проверить 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;
}
}
8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]