Cocos2d - 第二次运行场景不会安排更新

时间:2013-03-14 00:13:06

标签: cocos2d-iphone cclayer

从UIKit ViewController我这样做开始游戏:

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没有安排更新,我该如何修复它?

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

话虽如此,在您的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?

如果我不正确,请告诉我您要对导演电话采取的措施

答案 2 :(得分:0)

终于弄明白了。当在具有退出按钮的游戏中打开菜单时,我正在暂停这样的游戏:

[[self gameLayer] pause];

因此,当我开始一个新游戏时,Cocos2d仍然暂停,即使场景和图层已被解除分配,我正在创建一个新的glView。

如果我使用它,它可以工作:

[[self gameLayer] pauseSchedulerAndActions];

答案 3 :(得分:0)

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

[[CCDirector sharedDirector]pause];

在推送任何场景之前,您还必须在重启或菜单代码块中“恢复”导演:

[[CCDirector sharedDirector]resume];