2013-07-30 37 views
0

我正在將我的Cocos2D遊戲移植到Leap Motion。我已經實施了控件,但部分提交指南規定,當設備連接或未連接時,您必須提供可視指示。Leap Motion和Cocos2d(Xcode),在設備連接/斷開連接上顯示圖像?

大躍進代碼它告訴你設備斷開連接的部分是這樣的(我已經添加了我在遇到問題的一些自定義代碼,只有的NSLog是有標準):

- (void)onDisconnect:(NSNotification *)notification {

CCDirector *director = [CCDirector sharedDirector]; 
    CGSize winSize = [director winSize]; 

CCSprite *connect1 = [CCSprite spriteWithFile:[AssetHelper getDeviceSpecificFileNameFor:@"connecttest.png"]]; 
connect1.position = CGPointMake(winSize.width/2, winSize.height/2); 
[self addChild:background2 z:2]; 


    NSLog(@"Disconnected"); 

}

如果我啓動應用程序,一切工作正常,但斷開大躍進不顯示圖像。 Z位置是正確的,並且我知道該函數可以工作,因爲我看到「在日誌中斷開連接」,如果用終止應用程序函數替換CCSprite代碼,遊戲就會退出。

我也嘗試用場景加載替換代碼。卸下控制器將推到另一個場景,但它不是最優雅的解決方案,也不會在啓動時執行。

我懷疑這可能是其中的形象出現,然後真的很快消失的時間的事情。

我真的不知道。我需要做的是在設備斷開連接時顯示圖像,然後在重新連接時消失。

任何線索?

+0

所以這個Leap Motion部分工作正常嗎?我想說的是(至少在測試期間),如果你在Xcode的調試器中運行這個斷開事件,那麼斷開連接事件會被抑制,但是看起來好像你正在使用這些事件。 –

+0

事實上,在向Leap的一些支持人員發表演講時,他們認爲這可能是Objective-C實現方面的一個錯誤,但他們建議了一些我可以嘗試的方法,因爲onDisconnect調用沒有被正確調用。我會盡快給它試一試,並回報我只需要一些睡眠。 – PocketTim

回答

0

嗯,這是令人尷尬的,這是很簡單的東西,但我責怪剝奪睡眠;-)

所有你需要做的就是查詢[controller isConnected]初始化控制器時。但是我從來沒有在SDK中找到任何參考。

我的完整代碼塊在這裏,如果有人需要它。

- (void)onInit:(NSNotification *)notification { NSLog(@"Initialized");

if([controller isConnected]) 
{ 
    CCLayer *layer = [CCLayer node]; 
    CCSprite *label = [CCSprite spriteWithFile:[AssetHelper getDeviceSpecificFileNameFor:@"connecttest2.png"]]; 
    [layer addChild:label]; 
    [[CCDirector sharedDirector] setNotificationNode:layer]; 
    CCDirector *director = [CCDirector sharedDirector]; 
    CGSize winSize = [director winSize]; 
    layer.position = CGPointMake(winSize.width/2, winSize.height/2); 
} else { 


    CCLayer *layer = [CCLayer node]; 
    CCSprite *label = [CCSprite spriteWithFile:[AssetHelper getDeviceSpecificFileNameFor:@"connecttest.png"]]; 
    [layer addChild:label]; 
    [[CCDirector sharedDirector] setNotificationNode:layer]; 
    CCDirector *director = [CCDirector sharedDirector]; 
    CGSize winSize = [director winSize]; 
    layer.position = CGPointMake(winSize.width - (winSize.width * 0.5), winSize.height - (winSize.height * 0.90)); 

} 

}

由於這是它似乎沒有任何去除方法應對全球CCLayer節點所以我所做的就是在再次重複相同的代碼onConnected方法,並在設備被識別後將斷開的圖像切換爲1x1透明像素。

不是最好的黑客,但它的工作相當好。

相關問題