events - SDL2 只返回第一个注册的 UserEvent
问题描述
我通过注册三个事件SDL_RegisterEvents
。但是,SDL_PollEvent()
只返回第一种类型的事件并吞下其他类型的事件。
这是我的代码(它是 Go,但我认为这与这里无关):
package main
import (
"github.com/veandco/go-sdl2/sdl"
"log"
)
func main() {
if err := sdl.Init(sdl.INIT_VIDEO | sdl.INIT_EVENTS); err != nil {
panic(err)
}
defer sdl.Quit()
evt1 := sdl.RegisterEvents(3)
evt2 := evt1 + 1
evt3 := evt1 + 2
sdl.PushEvent(&sdl.UserEvent{Type: evt1})
sdl.PushEvent(&sdl.UserEvent{Type: evt2})
sdl.PushEvent(&sdl.UserEvent{Type: evt3})
sdl.PushEvent(&sdl.UserEvent{Type: evt1})
event := sdl.WaitEvent()
for ; event != nil; event = sdl.PollEvent() {
userEvent, ok := event.(*sdl.UserEvent)
if ok {
switch (userEvent.Type) {
case evt1:
log.Println("got evt1")
case evt2:
log.Println("got evt2")
case evt3:
log.Println("got evt3")
}
}
}
}
这是输出:
2019/08/04 20:10:26 got evt1
2019/08/04 20:10:26 got evt1
所以evt1
我推送的两个事件都被投票了,但是evt2
我evt3
在中间推送的事件消失了。我尝试调用sdl.RegisterEvents(1)
三次来注册事件,但结果是一样的。
我究竟做错了什么?
解决方案
这只是因为去绑定,特别是行https://github.com/veandco/go-sdl2/blob/24851c1f2d98dcac2a68223a24e6f799fc921f1e/sdl/events.go#L1035(类型转换仅触发SDL_USEREVENT
,仅与第一个注册事件匹配; 其他任何事情都被报告为“CommonEvent”,丢失您可能已经传递的所有额外数据)。您可能应该向所述绑定的开发人员报告错误。
推荐阅读
- angular-material - 升级到 Angular 6、材料 6 后,选择选项事件连续触发,浏览器挂起。如何停止不需要的发射事件?
- java - 仅在一组值整数中按比例分配值
- javascript - Redux-saga - 选择/等待来自多个其他 saga 的数据
- python - QListView 中的复选框选择
- tensorflow - 如何通过 TensorFlow 加载 MNIST(包括下载)?
- android - 围栏状态的 Awareness API 查询
- xml - xsl:text 和 double 以及 text()/identity 模板的奇怪行为
- node.js - 使用特定配置启动 NodeJS
- angular - 无法在 Angular 6 应用程序中加载 css 文件
- arduino - 为什么在我的 Arduino 测试中(关于闪烁的 LED)将引脚编码为输出或不改变最终效果?