我正在将我的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代码,则游戏退出。
我也尝试用场景加载替换代码。移除控制器将推送到另一个场景,但它不是最优雅的解决方案,也不会在启动时执行。
我怀疑它可能是一个时间因素,图像出现然后很快消失。
我真的不知道。我需要做的是在设备断开连接时显示图像,然后在重新连接时消失。
任何线索?
答案 0 :(得分: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透明像素认可。
不是最好的黑客,但它能很好地完成工作。