【发布时间】:2018-10-07 09:19:54
【问题描述】:
是否可以在不轮询新事件的情况下使用 SDL_EventWatch/Filter?
#include <SDL2/SDL.h>
#include <iostream>
int SDLCALL watch(void *userdata, SDL_Event* event) {
std::cout << event->type << "\n";
return 1; // or 0
}
int main( ){
SDL_Window *window {SDL_CreateWindow("Window", 100, 100, 400, 400, 0)};
SDL_Renderer* renderer {SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED)};
SDL_SetEventFilter(watch, NULL);
function.Call("main"); // non-C++ function with endless loop
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
"main" 中已经有一个无限循环,它控制着大部分应用程序。然后,我会根据给 watch(..) 的 SDL_Event 调用适当的 Lua 函数。
此代码不对任何事件作出反应。
【问题讨论】:
-
嗨,你能告诉我们你的非 C++ 主函数吗?我认为您仍然需要轮询或打开或让 SDL 打开一个可能处理您的事件的线程。如果您正在运行循环,则必须以某种方式让 SDL 有机会处理这些事件。另请查看此 wiki 条目:wiki.libsdl.org/SDL_SetEventFilter
-
我认为这对你没有多大帮助。 main 函数做了很多逻辑,你可以用 Lua 或 Python 等语言快速编写脚本。当然,它还执行一些 SDL 渲染 C 调用。您的评论似乎导致对我的问题的否定回答。我有点期待。 :)
-
以可移植的方式进行会有问题。为什么这是个问题?无论如何你必须有渲染器刷新点,为什么事件队列的考虑不同?
-
你为什么暗示我认为这是一个问题?这不是问题,它只是一种不同的方式。不过还是谢谢。
标签: c++ event-handling sdl-2