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!

È stato utile?

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 
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top