NSMutableArray出于sprite的实例

时间:2012-06-11 05:39:08

标签: arrays cocos2d-iphone nsmutablearray

我有一个名为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];
    }}

sprite成功初始化,并按原样显示在屏幕上。但是,当我尝试将它们用于碰撞检测时,只有其中一个可以工作:

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

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

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

1 个答案:

答案 0 :(得分:2)

使用sprite的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");
     }
 }];