我在游戏中添加了一个关卡结束层,每个关卡都有自己的场景。我希望能够重新启动当前场景。显然场景会改变,但图层将保持不变。这是怎么做的。我试过了-
CCScene *currentScene = [[CCDirector sharedDirector]runningScene];
[[CCDirector sharedDirector]replaceScene:currentScene];
谢谢
我在游戏中添加了一个关卡结束层,每个关卡都有自己的场景。我希望能够重新启动当前场景。显然场景会改变,但图层将保持不变。这是怎么做的。我试过了-
CCScene *currentScene = [[CCDirector sharedDirector]runningScene];
[[CCDirector sharedDirector]replaceScene:currentScene];
谢谢
这不起作用,因为您不能用自身替换相同的场景对象:
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。否则添加自动释放。
我遇到了同样的问题。我试过这个
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;
}
希望这可以帮助。