0

私はポインターのことについて基本的な誤解をしています。スプライトをたくさん作りたいし、クラス全員に知ってもらいたい。私がやったこと-そしてそれが機能するというその種の奇跡はこれです:

.h ファイルで : を定義したCCSprite *brokenBox;ので、すべてのクラスが彼を見ることができます。後で、私は彼の多くを作成し、それぞれにボディを追加する機能を持っています。

-(void)someF
{

    brokenBox=[CCSprite spriteWithFile:@"brokenBox.png"];
    brokenBox.tag=5;
    brokenBox.position=ccp(point.x*relativeX, point.y );
    //now attach abody to him
    ....
    ....
    [self addChild:brokenBox];


}

現在、この関数は何度も呼び出されています (多くのボックスがここにあります)。私が理解できないのは、単一のポインターがそれが指しているファイルを何度も変更する方法と、彼を子として何度も追加できる方法です。彼は多くのポインターを作成しますか?

これらすべてのスプライトにアクセスできるようにするための正しい方法は何ですか? (今、私はそれらにアクセスします:[self getChildByTag:5];そして、それらはすべて同じタグ= 5を持っています.

どうもありがとう 。

4

1 に答える 1

1

スプライトを作成するたびに、ポインタの壊れたボックスが変更されます。したがって、「多くの」スプライトの作成が完了すると、brokenBox は作成した最後のスプライトを指します。

getChildByTag は、指定したタグを持つ子のリストで最初に検出されたもののみを返します。おそらく、次のようなものが必要です。

.h で

NSNutableArray *_brokenBoxes;

@property (nonatomic,readonly) NSArray *brokenBoxes;
// remove your property for brokenBox, it would be invalid (see above)

メートルで、

グローバル

@synthesize brokenBoxes = _brokenBoxes;

初期化

_brokenBoxes = [[NSMutableArray array] retain];

解放

[_brokenBoxes release];

掃除 :

[_brokenBoxes removeAllObjects];

someF :

CCSprite *brokenBox=[CCSprite spriteWithFile:@"brokenBox.png"];
....
....
[brokenBoxes addObject:brokenBox];
[self addChild:brokenBox];

他のクラスから、配列brokenBoxesを使用してスプライトにアクセスします。

for (CCSprite *brokenBox in self.brokenBoxes) {
    // do your stuff.
}
于 2013-08-12T11:12:49.040 に答える