0

我正在将我的 Cocos2D 游戏移植到 Leap Motion。我已经实现了控制,但提交指南的一部分规定您必须在设备连接或未连接时提供视觉指示。

告诉您设备已断开连接的 Leap 代码部分是这样的(我添加了一些我遇到问题的自定义代码,只有 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");

}

如果我启动应用程序一切正常,但断开 Leap 并不会显示图像。Z 位置正确,我知道该功能有效,因为我在日志中看到“断开连接”,如果我用终止应用程序功能替换 CCSprite 代码,游戏就会退出。

我也尝试用场景加载替换代码。移除控制器将推送到另一个场景,但这不是最优雅的解决方案,而且在启动时也不会这样做。

我怀疑这可能是一个时间问题,图像出现然后很快消失。

我真的不知道。我需要做的是在设备断开连接时出现图像,然后在重新连接时消失。

有什么线索吗?

4

1 回答 1

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 透明像素。

不是最好的 hack,但它可以很好地完成工作。

于 2013-07-30T19:36:59.600 回答