У меня немного проблемы с доступом к моим слоям, и это сводит меня с ума. По сути, моя иерархия сцен слоев выглядит следующим образом:
Compiler.m — CCLayer — содержит метод +(CCScene) и загружает все остальные CCLayers.
Construct.m — CCLayer — содержит движок box2d и его компоненты
Background.m — CCLayer — содержит фон.< br> 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 * background внутри слоя Construct, чтобы я мог перемещать его в соответствии с положением моего игрового героя 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
Это не работает, в некоторых отношениях я получаю нулевой указатель, tempBack не получает доступ к фону должным образом или вообще не обращается к фону.
Как я могу получить доступ и изменить переменную класса Background CCLayers +(CCSprite) bk??