我在访问我的图层时遇到了一些麻烦,这让我发疯了。基本上,我的图层场景层次结构如下:
Compiler.m - CCLayer - 持有 +(CCScene) 方法并加载所有其他 CCLayer。
Construct.m - CCLayer - 保存 box2d 引擎及其组件
Background.m - CCLayer - 保存背景。
Hud.m - CCLayer - 持有 HUD。
在 Compiler 实现类中,我将 Scene 和所有相关节点添加到 Compiler CCLayer:
@implementation Compiler
+(CCScene *) scene{
Compiler *compiler = [CompileLayer node];
CCScene *scene = [CCScene node];
[scene addChild: compiler];
//Add A Background Layer.
Background *layerBackground = [Background node];
layerBackground.position = CGPointMake(100,100);
[compiler addChild: layerBackground z: -1 tag:kBackground];
//Add The Construct.
Construct *construct = [Construct node];
[compiler addChild: construct z: 1];
//Add A Foreground Layer Z: 2
//After background is working.
//Add the HUD
HudLayer *hud = [Hud node];
[compiler addChild: hud z:3];
}
这一切都很好,我的层被添加到编译器中,并且编译器的场景被委托访问,如预期的那样。
我的问题是我试图在 Construct 层内访问我的背景 CCLayers - CCsprite *background,以便我可以根据我的 Construct 游戏英雄的位置移动它。
我尝试了许多不同的方法,但我目前决定使用类方法而不是实例方法来定义 CCSprite *background,以便我可以在我的构造层中访问它。
我还尝试使用@properties 访问并初始化该类的实例变量。
这是我的背景CCLayer:
@implementation Background
-(id) init
{
self = [super init];
if (self != nil)
{
CCSprite *temp = [Background bk];
[self addChild:temp z:0 tag:kBackGround];
}
return self;
}
+(CCSprite *)bk{
//load the image files
CCSprite *background = [CCSprite spriteWithFile:@"background.jpg"];
//get the current screen dimensions
//CGSize size = [[CCDirector sharedDirector] winSize];
background.anchorPoint = CGPointMake(0,0);
background.position = ccp(0,0);
return background;
}
@end
这有效,它将图像加载到背景层。
最后,我尝试从构造层访问背景图像。
@interface Construct : CCLayer{
CCSprite *tempBack;
}
@end
@implementation Construct
-(id) init{
tempBack = [Background bk]; //The background equals an instance variable
}
-(void) tick:(ccTime)dt {
tempBack.position.x ++; // To do Something here.
tempBack.opacity = 0.5; // Some more stuff here.
}
@end
这不起作用,我在某些方面收到一个“nil”指针,tempBack 没有正确访问背景,或者根本没有。
如何访问和修改后台 CCLayers 类变量 +(CCSprite) bk?