【问题标题】:Cocos2D: Get layer's position in scene from another classCocos2D:从另一个类获取图层在场景中的位置
【发布时间】:2012-10-05 21:37:38
【问题描述】:

我正在尝试在发生场景转换时检索作为子级添加到场景中的图层的当前位置。过渡是经过编辑的 Cocos2D 过渡,它会在出现新图层时将图层滑出屏幕。我使用更新方法在 CCActionEase 中创建了自己的实现:

#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 
    }

但是,当转换发生时,这些返回 0。大概是因为我得到了相对于自身的位置?

编辑:

我发现这行不通。通过这样做,我已经正确地访问了我当前的场景:

JoinedMapsScene * 场景 = (JoinedMapsScene *)[[CCDirector sharedDirector] runningScene];

并通过这样做来调用我假设的方法:

[场景getJoinedMapsLayerPosition];

令我惊讶的是,在转换发生时,当前 runningScene 是我的转换类!

它给了我这个例外: -[ExitLTransition getJoinedMapsLayerPosition]:无法识别的选择器发送到实例 0x5e4e20

我需要找出另一种方法。

【问题讨论】:

    标签: cocos2d-iphone position layer scene


    【解决方案1】:

    在 AppDelegate.h 中添加这个:

    @class CCLayer;
    
    @interface AppController : NSObject <UIApplicationDelegate, CCDirectorDelegate,UIGestureRecognizerDelegate>
    {
        CCLayer             *mCurrentLayer;
    
    }
    
    @property (nonatomic, retain) CCLayer *currentLayer;
    

    在 AppDelegate.mm 中添加:

    @implementation AppController
    @synthesize currentLayer = mCurrentLayer;
    

    在你的 Layer 初始化类中使用它。在全场景方法中。

    @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;
    }
    

    您可以检查项目中的任何位置..

     AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
    
     if([app.currentLayer  isKindOfClass:[MyMainMenu class]])
     {
         MyMainMenu *mm = (MyMainMenu*) app.currentLayer;
         [mm calFunction]; 
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      相关资源
      最近更新 更多