2

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

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

谢谢

4

2 回答 2

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。否则添加自动释放。

于 2012-11-11T13:39:47.533 回答
0

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

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

它给了我一个空白屏幕。

问题是这条线

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

[currentScene 类] 实际上返回 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;
}

希望这可以帮助。

于 2013-01-07T23:51:17.037 回答