レイヤーにアクセスするのに少し問題があり、それが私を狂わせています。基本的に、私のレイヤーシーンの階層は次のとおりです。
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];
}
これはすべて正常に機能し、私のレイヤーはコンパイラーに追加され、コンパイラーのシーンは、予測どおりにデリゲートによってアクセスされます。
私の問題は、Constructレイヤー内のBackground CCLayers-CCsprite * backgroundにアクセスして、Constructゲームヒーローの位置に応じて移動できるようにすることです。
私はさまざまなメソッドを試しましたが、現在、インスタンスメソッドではなくクラスメソッドを使用してCCSprite * backgroundを定義し、ConstructLayerでアクセスできるようにすることにしました。
また、@ propertyを使用してアクセスし、クラスのインスタンス変数を初期化してみました。
これが私の背景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にアクセスして変更するにはどうすればよいですか?