質問があります。誰かが答えてくれることを願っています。私は Objective C を初めて使用します。ほとんどの場合、問題はほとんどありませんが、クラス間で NSMutableArray を適切に渡す方法を理解していないことが明らかになりました。関連するコードは次のとおりです。
これは、NSMutableArray をキャッチしたいクラスです
#import "CanBee.h"
#import "Rat.h"
@implementation CanBee
-(id) init
{
if ((self = [super init])) {
if([[self parent] respondsToSelector:@selector(getRatsArray)] == YES)
{
ratsArray = (NSMutableArray *) [[self parent] performSelector:@selector(getRatsArray)];
}
[self scheduleUpdate];
}
return self;
}
-(void) update:(ccTime)delta
{
for (int i = 0; i <= ratsArray.count; i++) {
NSLog(@"in rats array loop in canBee: %i",i);
Rat * rat = [ratsArray objectAtIndex:i];
if (abs(self.position.x - rat.position.x) < 10 && abs(self.position.y - rat.position.y) < 10) {
[[self parent] removeChild: rat cleanup:TRUE]; //<-- this line is probably not correct, but not relevant to my question anyway, don't worry about it for this post
}
}
}
@end
これは、ゲームのメイン コントローラー クラスである gameLayer クラスの init 関数からのものです。
ratsArray = [NSMutableArray alloc];
Rat * rat = [Rat spriteWithFile:@"rat.png"];
[rat setPosition:ccp((4 * 53) - 25,100)];
[rat setScale:.75];
[self addChild:rat z:6];
[ratsArray addObject:rat];
これは、同じコントローラ クラスの getter 関数です。
-(NSMutableArray *) getRatsArray {
return ratsArray;
}
ratsArray はコントローラ クラスのグローバル変数であり、個別に、キャッチャーの "CanBee" クラスでもグローバル変数であることに注意してください。
また、配列のコピーを渡すのではなく、ポインターまたは参照を渡して、キャッチ クラスが元の配列とそれに含まれるオブジェクトと対話できるようにしたいことも言及しておく必要があります。
手伝ってくれてどうもありがとう!