У меня немного проблем с доступом к моим слоям, и это сводит меня с ума. По сути, моя иерархия сцен слоя выглядит следующим образом:
Compiler.m - CCLayer - содержит метод + (CCScene) и загружает все остальные CCLayer.
Construct.m - CCLayer - содержит двигатель box2d и его компоненты
Background.m - CCLayer - содержит фон.
Hud.m - CCLayer - держит HUD.
в классе реализации компилятора я добавляю сцену и все соответствующие узлы к 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];
}
Это все работает нормально, мои слои добавляются в компилятор, и делегат получает доступ к сцене компилятора в соответствии с прогнозом.
Моя проблема в том, что я пытаюсь получить доступ к своему фону CCLayers - CCsprite * внутри слоя Construct, чтобы я мог перемещать его в соответствии с положением моего игрового героя Construct.
Я пробовал много разных методов, но в настоящее время я решил использовать метод класса, а не метод экземпляра, чтобы определить фон CCSprite *, чтобы я мог получить к нему доступ в своем конструктивном слое.
Я также попытался получить доступ с помощью @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
Это работает, загружает изображение в фоновый слой.
Затем, наконец, я пытаюсь получить доступ к фоновому изображению из слоя Construct.
@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 ??