【发布时间】:2016-11-09 20:41:28
【问题描述】:
我正在通过 FNA 使用SDL2 C# wrapper,我需要能够检测窗口何时调整大小、最小/最大化等。从我的发现看来,我应该使用SDL_EventFilter 委托和@ 987654323@ 枚举。我尝试使用SDL_AddEventWatch 和SDL_SetEventFilter 方法附加这样的事件,但我没有收到任何与窗口管理相关的事件。
如何正确使用 C# 包装器中的 SDL 窗口事件?
【问题讨论】:
我正在通过 FNA 使用SDL2 C# wrapper,我需要能够检测窗口何时调整大小、最小/最大化等。从我的发现看来,我应该使用SDL_EventFilter 委托和@ 987654323@ 枚举。我尝试使用SDL_AddEventWatch 和SDL_SetEventFilter 方法附加这样的事件,但我没有收到任何与窗口管理相关的事件。
如何正确使用 C# 包装器中的 SDL 窗口事件?
【问题讨论】:
在您的事件轮询循环中为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 中列出了所有窗口事件。
【讨论】:
SDL_SetEventFilter,但我无法让您的示例使用它。
Game 类添加了一个自定义事件,用于自定义处理事件。我想我会提交一个问题,看看这是否会在 FNA 中有所改变。感谢您的帮助!