我有一个名为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");
}
我想要的是在创建每个精灵时“索引”每个精灵,以便碰撞检测起作用。
答案 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");
}
}];