0

从 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

4 回答 4

0

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

更新: 除此之外,尽量不要调用 [director end],因为它会完全关闭 cocos2d,这是已知的问题。

于 2013-03-14T00:32:21.870 回答
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];

摘自:如何在 cocos2d 游戏中实现暂停/恢复?

如果我不正确,请告诉我您要如何处理您的主管电话

于 2013-03-14T03:17:19.280 回答
0

终于想通了。在游戏中打开带有退出按钮的菜单时,我正在暂停游戏,如下所示:

[[self gameLayer] pause];

因此,当我开始一个新游戏时,Cocos2d 仍然处于暂停状态,即使场景和图层被释放并且我正在创建一个新的 glView。

如果我使用它,它会起作用:

[[self gameLayer] pauseSchedulerAndActions];
于 2013-03-15T00:12:23.303 回答
0

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

[[CCDirector sharedDirector]pause];

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

[[CCDirector sharedDirector]resume]; 
于 2015-04-07T08:09:48.543 回答