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文件中的变量)
我希望,这有助于……您似乎混淆了子类和属性。你在问哪一个?不。。。我正在使用Cocos2d框架。或者我创建一个全局单例来访问它,或者我将对象传递给其他类,或者,我在cocos2中使用“addchild”内存管理。这解释了可能的策略:我下面的建议对你有用吗?