【问题标题】:Detecting window events in the SDL2 C# wrapper在 SDL2 C# 包装器中检测窗口事件
【发布时间】:2016-11-09 20:41:28
【问题描述】:

我正在通过 FNA 使用SDL2 C# wrapper,我需要能够检测窗口何时调整大小、最小/最大化等。从我的发现看来,我应该使用SDL_EventFilter 委托和@ 987654323@ 枚举。我尝试使用SDL_AddEventWatchSDL_SetEventFilter 方法附加这样的事件,但我没有收到任何与窗口管理相关的事件。

如何正确使用 C# 包装器中的 SDL 窗口事件?

【问题讨论】:

    标签: c# sdl sdl-2


    【解决方案1】:

    在您的事件轮询循环中为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 包装器设置事件轮询循环吗?我的尝试是使用SDL_SetEventFilter,但我无法让您的示例使用它。
    • 您仍然可以在过滤器方法中获得事件。只需像我的回答一样打开事件类型。为什么您需要使用过滤器来执行此操作?是否要丢弃某些事件?
    • 问题是我没有让它捕捉到任何事件,所以我认为我做错了什么。我在 FNA 源中四处查看,结果发现 FNA 已经在轮询所有事件,难怪我没有得到任何事件!我找不到任何访问这些事件的方法,我向 FNA Game 类添加了一个自定义事件,用于自定义处理事件。我想我会提交一个问题,看看这是否会在 FNA 中有所改变。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多