0

spriteArray という配列があります。

@property (retain) NSMutableArray *spriteArray;
@synthesize spriteArray = spriteArray_;

そして、私はスプライトを持っています:

@property (nonatomic, assign) CCSprite *sprite;
@synthesize sprite = sprite_;

spriteNumber (整数) の値に応じて、特定の数のスプライトを作成します。

for (int i = 0; i < spriteNumber; i++) {
    if ([spritetype_ isEqualToString:@"typeOne"]) {

        self.sprite = [[typeOne alloc] initTypeOne];
        self.sprite.position = randomPoint;
        [self.spriteArray addObject:self.sprite];
        [self addChild:self.sprite];
    }}

スプライトは正常に初期化され、画面に表示されます。ただし、衝突検出に使用しようとすると、そのうちの 1 つだけが機能します。

    if (CGRectIntersectsRect(self.sprite.boundingBox, self.swat.boundingBox)) {
    //swat is another sprite
    NSLog(@"detected");
    }

私が望んでいたのは、衝突検出が機能するように、スプライトが作成されるたびに「インデックス」を付けることです。

サンプルコード: http://pastebin.com/swNUwB6U

4

1 に答える 1

2

スプライトのタグ プロパティを使用します。

for (int i = 0; i < spriteNumber; i++) {
  if ([spritetype_ isEqualToString:@"typeOne"]) {

    typeOne *typeOneSprite = [[typeOne alloc] initTypeOne];
    typeOneSprite.position = randomPoint;

// USE TAG!
    typeOneSprite.tag = i;

    [self.spriteArray addObject:typeOneSprite];
    [self addChild:typeOneSprite];
// Don't forget to release if you are not using ARC.
}}

次に、衝突検出コードでタグ値を呼び出します。

[self.spriteArray enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop)
 {
    typeOne *spriteOne = (typeOne *)obj;
    if (CGRectIntersectsRect(spriteOne.boundingBox, self.swat.boundingBox)) 
    {
      //swat is another sprite
      if (spriteOne.tag == numberyouwant){}
      NSLog(@"detected");
     }
 }];
于 2012-06-11T05:49:01.027 に答える