2016-11-09 5 views
3

Я использую SDL2 C# wrapper через FNA, и мне нужно определить, когда изменяется размер окна, мин/максимизирует и т. Д. Из того, что я нашел, кажется, я должен использовать SDL_EventFilter делегат и SDL_WindowEventID перечисление. Я попытался подключить такое событие, используя методы SDL_AddEventWatch и SDL_SetEventFilter, но я не получаю никаких событий, связанных с управлением окнами.Обнаружение событий окна в оболочке SDL2 C#

Как правильно использовать события окна SDL в C#-оболочке?

ответ

2

В вашем событии цикла опроса добавить случай для SDL_WINDOWEVENT:

SDL_Event event; 
while (SDL_PollEvent(out sdlEvent) == 1) { 
    switch(sdlEvent.type) { 
     case SDL_EventType.SDL_WINDOWEVENT: 
      HandleWindowEvent(sdlEvent.window); 
      break; 

     // other events here ... 
    } 

    Thread.Sleep(1); 
} 

И тогда вы могли бы иметь метод обработки этих событий:

HandleWindowEvents(SDL_WindowEvent wEvent) { 
    switch(wEvent.windowEvent) { 
     case SDL_WindowEventID.SDL_WINDOWEVENT_RESIZED: 
      Console.WriteLine($"Window resized: {wEvent.data1}x{wEvent.data2}"); 
      break; 

     // more window events here ... 
    } 
} 

Все окна события изложены в the Wiki.

+0

Не могли бы вы добавить, как настроить цикл опроса событий для оболочки SDL? Мои попытки использовались 'SDL_SetEventFilter', и я не могу заставить ваш пример работать с этим. – jsmars

+0

Вы по-прежнему получаете событие, прошедшее в вашем методе фильтрации. Просто включите тип события, как в моем ответе. Почему именно вам нужно сделать это с фильтром? Вы хотите отказаться от определенных событий? – rinukkusu

+1

Проблема заключалась в том, что я не получал ее, чтобы поймать какие-либо события, поэтому я предположил, что делаю что-то неправильно. Я огляделся в источнике FNA, и выяснилось, что FNA уже проводит опрос всех событий, неудивительно, что я не получаю ни одного из них! Я не мог найти способ доступа к этим событиям, я добавил пользовательское событие в класс FNA 'Game' для пользовательской обработки событий. Наверное, я отправлю вопрос и посмотрю, есть ли что-то изменить в FNA. Спасибо за помощь! – jsmars