我已将回调连接到我的
GCMouse
,如下所示:
mouse.mouseInput.mouseMovedHandler = ^(GCMouseInput *mouseInput, float deltaX, float deltaY) {
info( "Mouse moved %f %f", deltaX, deltaY );
};
但是,输出似乎正在被缓冲,并以巨大的爆发力发送到我的程序(几秒钟内没有事件,然后一个游戏帧中大约有 1000 个事件)
日志消息格式为:
[ type ][ thread ][ time ][ Frame Number ]: (..message..)
[ ⚪️ Info ][ M-300977600 ][ 21:23:19 ][ 449 ]: Mouse moved 1.000000 -0.000000
connect_block_invoke InputMan_Mac.mm @ 46
[ ⚪️ Info ][ M-300977600 ][ 21:23:19 ][ 449 ]: Mouse moved 1.000000 -0.000000
connect_block_invoke InputMan_Mac.mm @ 46
[ ⚪️ Info ][ M-300977600 ][ 21:23:19 ][ 449 ]: Mouse moved 0.000000 1.000000
connect_block_invoke InputMan_Mac.mm @ 46
... ~500 move events, all in frame 449:
[ ⚪️ Info ][ M-300977600 ][ 21:23:20 ][ 533 ]: Mouse moved 2.000000 1.000000
connect_block_invoke InputMan_Mac.mm @ 46
[ ⚪️ Info ][ M-300977600 ][ 21:23:20 ][ 533 ]: Mouse moved 4.000000 2.000000
connect_block_invoke InputMan_Mac.mm @ 46
[ ⚪️ Info ][ M-300977600 ][ 21:23:20 ][ 533 ]: Mouse moved 8.000000 4.000000
connect_block_invoke InputMan_Mac.mm @ 46
... ~ 200 move events, all in frame 533
[ ⚪️ Info ][ M-300977600 ][ 21:23:25 ][ 1169 ]: Mouse moved 2.000000 -14.000000
connect_block_invoke InputMan_Mac.mm @ 46
[ ⚪️ Info ][ M-300977600 ][ 21:23:25 ][ 1169 ]: Mouse moved 2.000000 -8.000000
connect_block_invoke InputMan_Mac.mm @ 46
[ ⚪️ Info ][ M-300977600 ][ 21:23:25 ][ 1169 ]: Mouse moved 1.000000 -7.000000
connect_block_invoke InputMan_Mac.mm @ 46
... hundreds of events all in frame 1169 ...
是否有设置或其他功能可以禁用输入缓冲?我想要立即输入。我能够通过 Cocoa 消息获取输入,没有任何延迟
您应该将
GCMouse.handlerQueue
设置为比主队列更高优先级的队列
mouse.handlerQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
处理事件的默认队列是
dispatch_get_main_queue()
,实际上处理事件的速度相当慢