Вы можете использовать CCDirector сказать, какая сцена Бег.
[[CCDirector sharedDirector] runningScene];
Что касается отображения меню. Вам нужно будет проверить с родителем меню. Если родитель, где ваш CCLayer, то вы можете проверить с помощью
// assume menu is set up to have tag kMenuTag
CCMenu * menu = [self getChildByTag:kMenuTag];
Если меню ребенка какого-то другого узла, вы можете получить родительский через подобный метод и получить ссылку на меню.
Если menu == nil
, он не отображается.
UPDATE
В cocos2d, вы не рекомендуется держать ссылки на все ваши спрайтов, вместо этого вы должны дать каждому узлу уникальный тег и использовать, чтобы ссылаться на него. Чтобы достичь своей первой цели, вы можете присвоить вашей сцене свой тег в двух соответствующих классах 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
...
Есть ли способ, которым я могу NSLog текущего runningScene моего CCDirector, всякий раз, когда я пытаюсь сделать оператор if, обнаруживающий, что один CCScene открыт, он всегда НЕТ, даже если он должен быть ДА. –
@iBradApps Надеюсь, мое редактирование помогает. –
Да, да. Будет ли другой способ иметь BOOL в синглтоне и просто установить его в YES или NO в зависимости от сцены? –