GCMouse 输入缓冲和延迟

问题描述 投票:0回答:1

我已将回调连接到我的

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 消息获取输入,没有任何延迟

macos gamecontroller gcmouse
1个回答
0
投票

您应该将

GCMouse.handlerQueue
设置为比主队列更高优先级的队列

  mouse.handlerQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

处理事件的默认队列是

dispatch_get_main_queue()
,实际上处理事件的速度相当慢

© www.soinside.com 2019 - 2024. All rights reserved.