(Cocos2d) Rileva quale ccscene sta mostrando?
-
12-11-2019 - |
Domanda
È possibile rilevare quale ccscene sta attualmente mostrando sulla scena? Ho 2 ccscenes nel mio gioco e voglio che si verifichi una certa azione se si sta mostrando.
Anche domanda rapida, se volevo verificare se un ccmenu lo è non Mostrare attualmente farei qualcosa di simile
if (!menu) {
//Menu is not showing currently
}
Sono un po 'un noob quando si tratta di cocos2d quindi per favore perdonami :)
Grazie!
Soluzione
Puoi usare il CCDirector per dire quale scena è in esecuzione.
[[CCDirector sharedDirector] runningScene];
Per quanto riguarda se il menu è mostrato. Dovresti verificare con il genitore del menu. Se il genitore in cui il tuo cclayer, allora potresti controllare
// assume menu is set up to have tag kMenuTag
CCMenu * menu = [self getChildByTag:kMenuTag];
Se il menu è figlio di qualche altro nodo, è possibile ottenere il genitore attraverso un metodo simile e ottenere un riferimento al menu.
Se la menu == nil
, non è mostrato.
AGGIORNARE
In COCOS2D, sei scoraggiato dal mantenere i riferimenti a tutti i tuoi sprite, invece dovresti dare a ciascun nodo un tag unico e usarlo per fare riferimento. Per raggiungere il tuo primo obiettivo, puoi dare alla tua scena un tag nelle tue 2 rispettive classi CClayer.
Puoi impostare i tuoi tag univoci in un enum in un file chiamato tags.h, quindi importarlo in qualsiasi classe che necessita di accesso ai tuoi tag
Esempio di tags.h
enum {
kScene1Tag = 0,
kScene2Tag = 1,
kMenuTag = 2};
Quindi nella tua classe di livello
+(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;
}
Ora quando prendi la scena corrente puoi controllare contro i tag
int currentSceneTag = [[CCDirector sharedDirector] runningScene].tag;
if (currentSceneTag == kScene1Tag) {
} else if (currentSceneTag == kScene2Tag) {
}
Il tag
la proprietà è da CCNode
che è la classe base di CCLayer
, CCScene
, CCSprite
, CCMenu
...
Altri suggerimenti
Questo come scoprire quale scena sta correndo
if ([CCDirector sharedDirector].runningScene == yourScene1) {
// your scene 1 is showing
} else {
// your scene 2 is showing
}
e per scoprire se un nodo è figlio della scena di corsa
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
}