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