2012-06-11 4 views
0

Я массив под названием spriteArray:NSMutableArray из экземпляров спрайтов

@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

ответ

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"); 
    } 
}]; 
+0

Когда я пытаюсь это, теги только один из спрайтов, и использует тег 4 – akuritsu

+0

Вы обращаетесь спрайт неправильно. Вам не нужно делать спрайт как свойство вашего класса. Использование переменных экземпляра и добавление его в ваш NSMutableArray. Я обновил код, чтобы показать вам, как это делается. –

+0

typeOneSprite * спрайтOne = (typeOneSprite *) obj; дает ошибку: использование необъявленного идентификатора «typeonesprite» означает «typeOneSprite_»? – akuritsu

Смежные вопросы