Question

Est-il possible de détecter CCScene est actuellement à l'affiche sur la scène?J'ai 2 CCScenes dans mon jeu et je veux une certaine action de se produire si l'on est à l'affiche.

Aussi rapide liés à la question, si je voulais vérifier si une CCMenu est pas montrant actuellement je ferais quelque chose comme

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

Je suis un peu un noob quand il s'agit de Cocos2D, de sorte s'il vous plaît pardonnez-moi :)

Merci!

Était-ce utile?

La solution

Vous pouvez utiliser le CCDirector de dire que la scène est en cours d'exécution.

[[CCDirector sharedDirector] runningScene];

Quant à savoir si le menu est affiché.Vous devez vérifier avec le parent du menu.Si le parent où votre CCLayer, alors vous pouvez le vérifier par

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

Si le menu est l'enfant d'un autre noeud, vous pouvez obtenir le parent par le biais d'une méthode similaire, et obtenir une référence vers le menu.

Si l' menu == nil, il est pas à l'affiche.

Mise à JOUR

Dans cocos2d, vous êtes découragés de conservation des références à l'ensemble de vos sprites, au lieu de cela, vous devriez être en donnant à chaque nœud une étiquette unique et l'utiliser pour y faire référence.Pour atteindre votre objectif premier, vous pouvez donner à votre scène une balise dans votre 2 respectifs CCLayer classes.

Vous pouvez configurer vos étiquettes uniques dans un enum dans un fichier appelé Balises.h, puis de l'importer dans toutes les classes qui ont besoin d'accéder à vos tags

Exemple De Balises.h

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

Ensuite, dans votre couche de la classe

+(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;
}

Maintenant, quand vous prenez la scène actuelle, vous pouvez vérifier contre les tags

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

} else if (currentSceneTag == kScene2Tag) {

}

L' tag la propriété est à partir de CCNode qui est la classe de base CCLayer, CCScene, CCSprite, CCMenu...

Autres conseils

Ceci comment savoir quelle scène fonctionne

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

et pour savoir si un nœud est enfant de la scène de course

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 
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top