首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何允许Leap在OS应用程序中控制我的光标?

如何允许Leap在OS应用程序中控制我的光标?
EN

Stack Overflow用户
提问于 2013-08-06 02:00:07
回答 1查看 1.4K关注 0票数 4

所以我有一个在cocos2D中内置的Mac游戏。

我用手势模拟键盘命令来控制我的角色,而且效果很好。

我把我的游戏提交给了AirSpace商店,它被拒绝了,理由是Leap也应该用来控制我的菜单,我想这是相当公平的。

事情是为了我的生命,我不知道这是怎么做到的。没有任何示例可以向我展示如何实现它,而SDK示例中也没有说明这一点的东西。

有没有人愿意分享的例子,我只需要它劫持我的光标,并允许点击时,通过一个按钮。我真的不认为简单的菜单导航就需要这么复杂的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-06 07:28:45

如果这是只使用Mac的游戏,您应该可以访问Quartz事件api。这是在OS中生成鼠标事件的最简单方法.

我建议简单地跟踪手掌(手)的位置,并在此基础上移动光标。

我的手掌跟踪就是这样的:

代码语言:javascript
运行
复制
float handX = ([[hand palmPosition] x]);
float handY = (-[[hand palmPosition] y] + 150);

"+ 150“是跳跃装置上方的毫米数,用作”0“位置。在那里,您可以根据手偏移量从0移动光标。

用于移动光标的函数(使用Quartz):

代码语言:javascript
运行
复制
- (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);
}

以及一个示例函数调用:

代码语言:javascript
运行
复制
[self mouseEventWithType:kCGEventMouseMoved loc:CGPointMake(newLocX, newLocY) deltaX:dX deltaY:dY];

这个电话会移动鼠标。基本上,您只需传递鼠标的新位置,以及相应的三角洲,相对于最后一个光标位置。

我可以提供更多的例子,例如获得鼠标位置的例子,点击鼠标,甚至一个完整的鼠标移动程序。

编辑1:

要使用Quartz处理单击和拖动,您可以调用上面仅在kCGEventLeftMouseDown中传递的相同函数。

问题是,为了拖动,不能调用kCGEventMouseMoved,必须在拖动发生时传递kCGEventLeftMouseDragged

一旦完成拖动,您必须传递一个kCGEventLeftMouseUp

要执行一次单击(没有拖动),您只需调用鼠标向下,然后立即向上,没有任何拖动.

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18070656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档