1

シーンで現在どの CCScene が表示されているかを検出することは可能ですか? ゲームに 2 つの CCSscenes があり、1 つが表示されている場合に特定のアクションを実行したいと考えています。

また、関連する簡単な質問です。CCMenu が現在表示されていないかどうかを確認したい場合は、次のようにしますか

    if (!menu) { 
    //Menu is not showing currently
    }

私は Cocos2D に関しては少し初心者なので、ご容赦ください :)

ありがとう!

4

2 に答える 2

3

CCDirectorを使用して、実行中のシーンを確認できます。

[[CCDirector sharedDirector] runningScene];

メニューが表示されているかどうか。メニューの親に確認する必要があります。あなたのCCLayerがいる親の場合、あなたは

// assume menu is set up to have tag kMenuTag
CCMenu * menu = [self getChildByTag:kMenuTag];

メニューが他のノードの子である場合は、同様の方法で親を取得し、メニューへの参照を取得できます。

の場合、menu == nil表示されていません。

アップデート

cocos2dでは、すべてのスプライトへの参照を保持することは推奨されていません。代わりに、各ノードに一意のタグを付け、それを使用して参照する必要があります。最初の目標を達成するために、2つのそれぞれのCCLayerクラスでシーンにタグを付けることができます。

Tags.hというファイルの列挙型に一意のタグを設定し、それをタグへのアクセスが必要なクラスにインポートできます。

タグの例.h

enum {  
    kScene1Tag = 0,  
    kScene2Tag = 1,  
    kMenuTag = 2};

次に、レイヤークラスで

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

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

    // return the scene
    return scene;
}

これで、現在のシーンを取得すると、タグと照合できます

int currentSceneTag = [[CCDirector sharedDirector] runningScene].tag;
if (currentSceneTag == kScene1Tag) {

} else if (currentSceneTag == kScene2Tag) {

}

tagプロパティは、、、、、..の基本CCNodeクラスです。CCLayerCCSceneCCSpriteCCMenu

于 2012-01-23T20:48:59.150 に答える
1

これは、実行中のシーンを見つける方法です

if ([CCDirector sharedDirector].runningScene == yourScene1) {
    // your scene 1 is showing
} else {
    // your scene 2 is showing
}

ノードが実行中のシーンの子であるかどうかを調べる

BOOL isShowing = NO;
CCNode *node = yourMenu;
while (node != nil) {
    if (node == [CCDirector sharedDirector].runningScene) {
        isShowing = YES;
        break;
    } else {
        node = node.parent;
    }
}
if (isShowing) {
    // your menu is in the display hierarchy 
}
于 2012-01-23T20:47:32.957 に答える