如果这是一款仅限 Mac 的游戏,您应该可以访问 Quartz 事件 API。这是在 OS X 中生成鼠标事件的最简单方法...
我建议简单地跟踪手掌(手)的位置,并据此移动光标。
这就是我进行手掌跟踪的方式:
float handX = ([[hand palmPosition] x]);
float handY = (-[[hand palmPosition] y] + 150);
“+ 150”是 Leap 设备上方的毫米数,用作“0”位置。从那里您可以根据从 0 开始的手偏移量来移动光标。
我用来移动光标的函数(使用 Quartz):
- (void)mouseEventWithType:(CGEventType)type loc:(CGPoint)loc deltaX:(float)dX deltaY:(float)dY
{
CGEventRef theEvent = CGEventCreateMouseEvent(NULL, type, loc, kCGMouseButtonLeft);
CGEventSetIntegerValueField(theEvent, kCGMouseEventDeltaX, dX);
CGEventSetIntegerValueField(theEvent, kCGMouseEventDeltaY, dY);
CGEventPost(kCGHIDEventTap, theEvent);
CFRelease(theEvent);
}
和一个示例函数调用:
[self mouseEventWithType:kCGEventMouseMoved loc:CGPointMake(newLocX, newLocY) deltaX:dX deltaY:dY];
此调用将移动鼠标。基本上,您只需传递鼠标的新位置,以及相对于最后一个光标位置的相应增量。
我可以提供更多示例,例如获取鼠标位置、单击鼠标甚至完整的鼠标移动程序的示例...
编辑1:
要使用 Quartz 处理单击和拖动,您可以调用与上述相同的函数,只需传入kCGEventLeftMouseDown
.
问题是,为了拖动,您不能调用 ,kCGEventMouseMoved
而必须kCGEventLeftMouseDragged
在拖动发生时通过。
拖动完成后,您必须通过kCGEventLeftMouseUp
.
要进行单击(不拖动),您只需先向下然后向上调用鼠标,无需任何拖动...