2013-03-14 72 views
0

从UIKit的视图控制器我这样做是为了开始游戏:的cocos2d - 运行场景中的第二次不安排更新

if (director.runningScene == nil) 
    { 
     [director runWithScene:[MyGameLayer scene]]; 
    } 
    [director startAnimation]; 

MyGameLayer看起来是这样的:

+(id) scene { 
    CCScene *scene = [CCScene node]; 
    MyGameLayer* layer = [MyGameLayer node]; 
    [scene addChild:layer z:0 tag:GameSceneLayerTagGame]; 


    return scene; 
} 

-(id) init { 
    if ((self=[super init])) 
    { 
     NSLog(@"init!"); 
     self.isTouchEnabled = YES; 

     [self initPhysics]; 

     [self scheduleUpdate]; 
    } 
    return self; 
} 

第一次我玩游戏,一切正常。 -(void) update: (ccTime) dt被调用,因为它应该。如果我退出比赛,这样做:

CCDirectorIOS* director = (CCDirectorIOS*)[CCDirector sharedDirector]; 
    [director stopAnimation]; 
    [director end]; 

然后再次玩游戏,-(void) update: (ccTime) dt不会被调用,尽管我知道-init()获取调用。游戏出现在屏幕上,但更新计划第二次不起作用。什么会导致Cocos2d不安排更新,我该如何解决?

回答

0

终于明白了这一点。当该具有的退出按钮游戏打开菜单,我暂停游戏是这样的:

[[self gameLayer] pause]; 

所以,当我将开始一个新的游戏,cocos2d的仍然暂停,即使现场,层释放我正在创建一个新的glView。

如果我用这个原理:

[[self gameLayer] pauseSchedulerAndActions]; 
0

您是否覆盖(实施)onEnter*/onExit*方法之一?如果是这样,请确保您调用超级实现,否则调度和触摸输入可能无法工作。

更新: 除此之外,不要试图调用[导演结束],因为它完全关闭了cocos2d,这已知是有问题的。

+0

不,我没有这样做。 – soleil 2013-03-14 00:55:47

+0

好吧,我又添加了一条建议,看更新 – LearnCocos2D 2013-03-14 08:05:34

+0

如果我不打电话给[导演结束],我第二次开始游戏时我只得到一个粉红色的屏幕。随之而来的是openGL错误层出不穷:OpenGL错误0x0501 in - [CCSprite draw] 532 – soleil 2013-03-14 18:10:55

0

假设您正在做的是为了防止导演在后台工作时更新4fps,您应该尝试再次启动导演。

话虽这么说,在你的applicationDidBecomeActive,添加以下代码

[[CCDirector sharedDirector] stopAnimation]; // call this to make sure you don't start a second display link! 
[[CCDirector sharedDirector] resume]; 
[[CCDirector sharedDirector] startAnimation]; 

来自How to implement pause/resume in cocos2d game?

如果我不正确,请让我知道你想与你办主任称

+0

我有一个视图控制器,有多个迷你游戏可供选择。所以我需要能够退出一场比赛并开始另一场比赛。问题是更新调度程序只适用于我玩的第一个游戏。在同一游戏或任何其他游戏的后续游戏中不会发生动画。 – soleil 2013-03-14 05:04:19

0

当您使用此代码的“暂停”游戏:

[[CCDirector sharedDirector]pause]; 

你还必须“恢复”你的主管在重启或在推动任何场景之前的菜单代码块:

[[CCDirector sharedDirector]resume];