我已经在游戏中添加了关卡层,每个关卡都有自己的场景。我希望能够重新启动当前场景。显然场景会改变,但图层将保持不变。怎么做我试过了 -
CCScene *currentScene = [[CCDirector sharedDirector]runningScene];
[[CCDirector sharedDirector]replaceScene:currentScene];
由于
答案 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;
}
希望这有帮助。