4

所以我有一个内置于 cocos2D 的 Mac OS X 游戏。

我正在使用手势来模拟键盘命令来控制我的角色,并且效果非常好。

我向 AirSpace 商店提交了我的游戏,但它被拒绝了,理由是 Leap 也应该用于控制我的菜单,我想这很公平。

事情是为了我的生活,我无法弄清楚这是如何完成的。没有示例可以向我展示如何实现它,SDK 示例中也没有任何内容可以说明这一点。

有没有人愿意分享任何示例,我只需要它来劫持我的光标并在按住按钮时允许单击。我真的不认为仅仅为了基本的菜单导航就需要这么复杂的东西。

4

1 回答 1

4

如果这是一款仅限 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.

要进行单击(不拖动),您只需先向下然后向上调用鼠标,无需任何拖动...

于 2013-08-06T07:28:45.360 回答