Cocos2d Gamecenter由于定位而崩溃了iOS6

时间:2012-10-13 20:04:39

标签: ios cocos2d-iphone game-center

在提出解决方案之前已经在这里提出过这个问题但是没有正常工作

iOS 6 Game Center Crash on Authentication

检查一下我遇到了同样的问题。链接中的上述代码解决了它,GameCenter工作但现在cocos2d游戏旋转,这为游戏带来了问题。有没有人解决它或有任何解决方案

也尝试了这个,但我觉得它不起作用GameCenter authentication in landscape-only app throws UIApplicationInvalidInterfaceOrientation,因为我正在使用cocos2d场景。

目前我正在实施此代码来解决问题,因为我别无选择。

-(NSUInteger)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window
{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

我需要的解决方案很容易打开游戏中心而不会崩溃,同时将方向的代码锁定为横向(将所有cocos2d场景保留在横向中) 任何帮助,将不胜感激。先谢谢你。

2 个答案:

答案 0 :(得分:2)

根据我的经验,我经历的大多数答案都解决了cocos2d 1.x上的问题。但是,我的游戏是使用cocos2d 2.x开发的,所以这就解决了我的问题:

1)我在目标设置中有以下设置:

enter image description here

enter image description here

人们说我应该添加肖像支持,但这只是搞砸了我的轮换......

2)确保您使用的是最新的cocos2d 2.x!即使它处于测试阶段! (目前v2.1 b2)

http://www.cocos2d-iphone.org/

相信我,我有很多错误和头痛,因为我认为beta不稳定,我没有使用它。最终,cocos2d始终建议升级到beta(与Xcode不同!)

3)在AppDelegate.m中,确保您没有在CCDirector runWithScene:方法pushScene:- (BOOL)application: didFinishLaunchingWithOptions: >

您想要做的是,仅使用此功能:

// This is needed for iOS4 and iOS5 in order to ensure
// ... blah blah blah
- (void)directorDidReshapeProjection:(CCDirector *)director {
    if (director.runningScene == nil) {
        // Add the first scene to the stack. blah blah...
        // and add blah
        [director runWithScene:[LanguageScene node]];
    }
}

只是猜测,不要在- (BOOL)application: didFinishLaunchingWithOptions:中对玩家进行身份验证。在加载主场景后对其进行身份验证,并调用onEnterTransitionDidFinish

答案 1 :(得分:2)

我终于让游戏中心在iOS 6中工作,并为我保留了锁定的景观。

我把这段代码放在我的AppDelegate中。 (不是viewcontroller)

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
  return (UIInterfaceOrientationMaskAll);
}

我把它放在我的视图controller.m

- (void)authenticateLocalPlayer {
     GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
     localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error)
    {
        if (viewController != nil)
        {
            [self presentViewController:viewController animated:YES completion:nil];  
        }
     };
}

我还找到了排行榜和成就视图控制器的更新。

[self presentViewController:achievements animated:YES completion:nil];
[self presentViewController:leaderboardController animated:YES completion:nil];

[self dismissViewControllerAnimated:NO completion:nil];