2012-10-05 2 views
0

J'essaie de récupérer la position actuelle de la couche ajoutée en tant qu'enfant dans une scène pendant la transition d'une scène. La transition est une transition Cocos2D modifiée qui fait glisser la couche hors de l'écran pendant qu'une nouvelle apparaît. J'ai créé ma propre mise en œuvre à l'intérieur CCActionEase avec une méthode de mise à jour:Cocos2D: Obtenir la position de la couche dans la scène d'une autre classe

#import "JoinedMapsScene.h" 
#import "JoinedMapsLayer.h" 

    @implementation CCEaseInWithPercentMult 
    -(void) update: (ccTime) t 
    { 

     [other update: powf(t,rate)]; 

     CCScene * scene = [[CCDirector sharedDirector] runningScene]; 

     CCNode* layer = [scene getChildByTag:0]; 

     NSLog(@"% .2f",layer.position.x); //returns 0 
     NSLog(@"% .2f",layer.position.y); //returns 0 
    } 

Cependant ceux-ci reviennent 0 lorsque la transition se produit. Vraisemblablement parce que j'obtiens la position par rapport à elle-même?

EDIT:

J'ai découvert cela ne fonctionnera pas. J'ai correctement accédé à ma scène actuelle en pointant la bonne classe en faisant ceci:

JoinedMapsScene * scène = (JoinedMapsScene *) [[CCDirector sharedDirector] runningScene];

Et d'appeler ma méthode supposée en faisant ceci:

[scène getJoinedMapsLayerPosition]; A ma grande surprise, pendant la transition, le runningScene actuel est ma classe de transition!

Il donne ma cette exception: - [ExitLTransition getJoinedMapsLayerPosition]: sélecteur non reconnu envoyé à l'instance 0x5e4e20

Je dois trouver une autre façon de le faire.

Répondre

0

Ajouter ceci dans AppDelegate.h:

@class CCLayer; 

@interface AppController : NSObject <UIApplicationDelegate, CCDirectorDelegate,UIGestureRecognizerDelegate> 
{ 
    CCLayer    *mCurrentLayer; 

} 

@property (nonatomic, retain) CCLayer *currentLayer; 

Ajouter ce dans AppDelegate.mm:

@implementation AppController 
@synthesize currentLayer = mCurrentLayer; 

Dans votre classe init couche utiliser. Dans toute la méthode de scène.

@implementation MyMainMenu 

+(CCScene *) scene 
{ 
    // 'scene' is an autorelease object. 
    CCScene *scene = [CCScene node]; 

    // 'layer' is an autorelease object. 
    MyMainMenu *layer = [MyMainMenu node]; 

    AppController *app = (AppController*) [[UIApplication sharedApplication] delegate]; 
    app.currentLayer = layer; 

    // add layer as a child to scene 
    [scene addChild: layer]; 

    // return the scene 
    return scene; 
} 

Vous pouvez vérifier partout dans le projet ..

AppController *app = (AppController*) [[UIApplication sharedApplication] delegate]; 

if([app.currentLayer isKindOfClass:[MyMainMenu class]]) 
{ 
    MyMainMenu *mm = (MyMainMenu*) app.currentLayer; 
    [mm calFunction]; 
} 
Questions connexes