2013-09-21 2 views
0

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

-(void)spinTapped 
{ 

     CCSprite *bullet = [CCSprite spriteWithFile:@"rwby_bullet.png"]; 
     bullet.position = ccp(self.character.position.x , self.character.position.y+25); 
     [bullets addObject:bullet]; 
     [self addChild:bullet z:-1]; 


} 

затем в обновлении:

if(isRight) bulletVelocity = 10; 
    else if(isLeft) bulletVelocity = -10; 

    for(CCSprite *bullet in bullets) 
    { 
     bullet.position = ccp(bullet.position.x + bulletVelocity + scrollVelocity, bullet.position.y); 
    } 

ответ

0

При создании каждой пули, установить метку. Сделайте его 10 для правой стороны и -10 для левой стороны, а затем просто добавьте метку для значения скорости. - (Недействительными) spinTapped {

CCSprite *bullet = [CCSprite spriteWithFile:@"rwby_bullet.png"]; 
    bullet.position = ccp(self.character.position.x , self.character.position.y+25); 
    if (isRight) { 
     bullet.tag = 10; 
    } 
    else { 
     bullet.tag = -10; 
    } 
    [bullets addObject:bullet]; 
    [self addChild:bullet z:-1]; 

}

NSMutableArray *deleteArray = [NSMutableArray alloc] init]; 

for(CCSprite *bullet in bullets) 
{ 
    bullet.position = ccp(bullet.position.x + bullet.tag + scrollVelocity, bullet.position.y); 
    if (*bullet is off screen*) { 
     [deleteArray addObject:bullet]; 
    } 
} 

for (CCSprite *bullet in deleteArray) 
{ 
    [bullets removeObject:bullet]; 
} 
+0

Спасибо так много! Это прекрасно работает! Любые советы о том, как удалить объекты из массива? Другими словами, сбор мусора? Прямо сейчас я использую [bullets removeObject: bullet]; это правильный путь? Потому что на данный момент этот способ приводит к сбою приложения при его удалении, а другой - на экране. – user1569940

+0

У вас могут возникнуть проблемы с потоками, или, если вы действительно запутались, вы удаляете объекты из массива при его повторении. Я бы рекомендовал вам создать второй массив пуль, которые необходимо удалить. Затем удалите их в безопасном месте. – HalR

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