Cocos2d重启当前场景

时间:2012-11-11 13:16:50

标签: cocos2d-iphone

我已经在游戏中添加了关卡层,每个关卡都有自己的场景。我希望能够重新启动当前场景。显然场景会改变,但图层将保持不变。怎么做我试过了 -

    CCScene *currentScene = [[CCDirector sharedDirector]runningScene];
    [[CCDirector sharedDirector]replaceScene:currentScene];

由于

2 个答案:

答案 0 :(得分:6)

这不起作用,因为您无法用自己替换相同的场景对象:

CCScene *currentScene = [[CCDirector sharedDirector]runningScene];
[[CCDirector sharedDirector]replaceScene:currentScene];

相反,您必须创建场景的新实例,如下所示:

[[CCDirector sharedDirector] replaceScene:[YourSceneClass scene]];

如果您不知道当前的场景类是什么,那么这应该有效:

CCScene *currentScene = [CCDirector sharedDirector].runningScene;
CCScene *newScene = [[[currentScene class] alloc] init];
[[CCDirector sharedDirector] replaceScene:newScene];

假设你现在每个人都应该使用ARC。否则添加自动释放。

答案 1 :(得分:0)

我遇到了同样的问题。我试过这个

CCScene *currentScene = [CCDirector sharedDirector].runningScene;
CCScene *newScene = [[[currentScene class] alloc] init];
[[CCDirector sharedDirector] replaceScene:newScene];

它给了我一个空白的屏幕。

问题在于这一行

CCScene *newScene = [[[currentScene class] alloc] init];

[currentScene class]实际返回CCScene ..

因此

[CCScene alloc] init] gives us a blank screen.

我解决这个问题的方法是为每个场景类设置标记。

例如:

+(CCScene *) scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScene node];
    scene.tag = 1;

// 'layer' is an autorelease object.
GameOneLayer * layer = [[[GameOneLayer alloc] init];

// add layer as a child to scene
[scene addChild: layer];

// return the scene
return scene;
}

希望这有帮助。