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 に答える