(Cocos2D) Определить, какая CCScene показывает? - PullRequest
1 голос
/ 24 января 2012

Можно ли определить, какая CCScene в данный момент отображается на сцене? В моей игре 2 CCScenes, и я хочу, чтобы одно действие происходило, если оно показывается.

Также быстрый связанный вопрос, если бы я хотел проверить, является ли CCMenu , а не , показывающий, буду ли я делать что-то вроде

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

Я немного новичок, когда дело доходит до Cocos2D, поэтому, пожалуйста, прости меня:)

Спасибо!

Ответы [ 2 ]

3 голосов
/ 24 января 2012

Вы можете использовать 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, а затем импортировать его в любые классы.которым нужен доступ к вашим тегам

Пример Tags.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, который является базовым классом CCLayer, CCScene, CCSprite, CCMenu ...

1 голос
/ 24 января 2012

Это как узнать, какая сцена запущена

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 
}
...