2013-08-06 58 views
4

所以我有一個用cocos2D構建的Mac OS X遊戲。如何讓Leap Motion在OS X應用程序中控制我的光標?

我使用手勢來模擬鍵盤命令來控制我的角色,它工作得很好。

我將我的遊戲提交給了AirSpace商店,因爲Leap應該用來控制我的菜單,我認爲這已經足夠公平了。

事情是爲了我的生活我無法弄清楚這是如何完成的。沒有任何示例可以告訴我如何實現它,並且在SDK示例中也沒有示例說明它。

有沒有人有他們願意分享的任何示例,我只需要它劫持我的光標,並允許在按鈕上方進行單擊。對於基本的菜單導航,我真的不認爲這麼複雜。

回答

4

如果這是一個僅限Mac的遊戲,您應該可以訪問Quartz事件api。這是在OS X中生成鼠標事件的最簡單方法...

我建議只需跟蹤手掌(手)位置,然後根據該位置移動光標。

這是我做我的手掌追蹤:

float handX = ([[hand palmPosition] x]); 
float handY = (-[[hand palmPosition] y] + 150); 

的「+ 150」是大躍進設備上面毫米的數量,爲「0」的位置使用。

- (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]; 
從那裏你可以根據手從0

我用移動(使用Quartz)光標功能失調移動光標

此調用將移動鼠標。基本上,您只需傳遞鼠標的新位置和相應的增量,相對於最後一個光標位置。

我可以提供更多的例子,如用於獲取鼠標位置,點擊鼠標,甚至是完整的鼠標移動程序的例子...

編輯1:

爲了處理單擊並拖動石英,您可以調用與上述相同的功能,只能通過kCGEventLeftMouseDown

問題在於,爲了拖動您不能撥打kCGEventMouseMoved,您必須在發生拖動時通過kCGEventLeftMouseDragged

拖動完成後,您必須通過kCGEventLeftMouseUp

做單點擊(無阻力),您只需撥打鼠標下來,然後向上權後,沒有任何拖...

+0

這完美地工作,非常感謝。唯一需要弄清楚的是如何實現持續的點擊和拖拽。因爲我有一個從我的iOS版本採用的頁面控制層,我想保留在 – PocketTim

+0

@TimHugall好吧我添加了點擊和拖動編輯... – Teak

+0

真棒,謝謝。我知道這會幫助很多其他人,因爲有很多人在搜索,但沒有多少人在回答。 – PocketTim

相關問題