Objective c Cocos2d:accessing child´;他来自其他班级

Objective c Cocos2d:accessing child´;他来自其他班级,objective-c,cocos2d-iphone,parent-child,Objective C,Cocos2d Iphone,Parent Child,好的!这是我初始化游戏的主要场景,在ParallaxBgTestLayer中,有一个类被添加为名为DigBackground的子类,它有一个属性,我想从另一层gameplayLayer设置该属性 所以基本上我想从我的gameplay层访问另一个类中孩子的孩子。这样做的首选方式是什么?甚至可以使用标记访问其他类的子类吗 -(id) init { self = [super init]; if (self) { ParallaxBgTestLayer *bg

好的!这是我初始化游戏的主要场景,在
ParallaxBgTestLayer
中,有一个类被添加为名为
DigBackground
的子类,它有一个
属性
,我想从另一层
gameplayLayer
设置该属性

所以基本上我想从我的
gameplay
层访问另一个类中孩子的孩子。这样做的首选方式是什么?甚至可以使用标记访问其他类的子类吗

-(id) init
{
    self = [super init];
    if (self)
    {

        ParallaxBgTestLayer *bgLayer = [ParallaxBgTestLayer node];
        [self addChild:bgLayer z:kParallaxBackgroundLayer];

        DigGameplayLayer *gameplayLayer = [DigGameplayLayer node];
        [self addChild:gameplayLayer z:kGameplayLayer];

    }
    return self;

您可以用非常简单的方法来完成:

@class ParallaxBgTestLayer;
@class DigGameplayLayer;

@interface MainClass
{
    ParallaxBgTestLayer *bgTestLayer;
    DigGameplayLayer    *gameplayLayer;  
}
@property(monatomic, assign) ParallaxBgTestLayer bgTestLayer;
@property(monatomic, assign) DigGameplayLayer    *gameplayLayer;  
@end

@implementation MainClass

-(id) init
{
    self = [super init];
    if (self)
    {

        self.bgLayer = [ParallaxBgTestLayer initWithParent:self];
        [self addChild:self.bgLayer z:kParallaxBackgroundLayer];

        self.gameplayLayer = [DigGameplayLayer initWithParent:self];
        [self addChild:self.gameplayLayer z:kGameplayLayer];

    }
    return self;

}
@end

@interface ParallaxBgTestLayer 
{
    CCNode *parentLayer;
}
@property(monatomic, assign) CCNode *parentLayer;

-(id) initWithParent:(CCNode*)inParent;
@end

@implementation ParallaxBgTestLayer

-(id) initWithParent:(CCNode*)inParent
{
   ParallaxBgTestLayer *obj = [ParallaxBgTestLayer node];
   obj.parentLayer = inParent;
   return obj;
}

-(void)CallMethodInGamePlayLayer
{
   [((DigGameplayLayer*)( (MainClass*)self. parentLayer).gameplayLayer  functionInGamePlayLayer];
}

@end


@interface DigGameplayLayer 
{
    CCNode *parentLayer;
}
@property(monatomic, assign) CCNode *parentLayer;

-(id) initWithParent:(CCNode*)inParent;

@implementation DigGameplayLayer

-(id) initWithParent:(CCNode*)inParent
{
   DigGameplayLayer *obj = [DigGameplayLayer node];
   obj.parentLayer = inParent;
   return obj;
}

-(void) functionInGamePlayLayer
{

}
@end

我将通过以下步骤来实现这一点:

  • 更新/覆盖DigGameplayLayer的init方法,以获得一个以上的参数ParallaxBgTestLayer
  • 例如,将您的gameplay init方法重命名为DigGameplayLayer initOnBackground:(ParallaxBgTestLayer*)backgroundLayer
  • 在DigGameplayLayer的实现文件中导入ParallaxBgTestLayer.h
  • 访问ParallaxBgTestLayer的任何局部变量(添加到ParallaxBgTestLayer.h文件中的变量)
如果只需要从一个位置访问,我认为这比创建一个单例对象要好。当我在应用程序中的多个位置需要它们时,我会使用singleton


我希望,这有助于……

您似乎混淆了子类和属性。你在问哪一个?不。。。我正在使用Cocos2d框架。或者我创建一个全局单例来访问它,或者我将对象传递给其他类,或者,我在cocos2中使用“addchild”内存管理。这解释了可能的策略:我下面的建议对你有用吗?