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];
    }}

精灵成功初始化,并按应有的方式出现在屏幕上。但是,当我尝试将它们用于碰撞检测时,其中只有一个有效:

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

我想要的是在创建每个精灵时对其进行“索引”,以便碰撞检测起作用。

示例代码: http: //pastebin.com/swNUwB6U

4

1 回答 1

2

使用精灵的 tag 属性。

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 回答