2013-09-21 73 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

太謝謝你了!它的作品非常漂亮!有關如何從陣列中刪除對象的任何提示?換句話說,適當的垃圾收集?現在我正在使用[bullet removeObject:bullet];這是正確的方式嗎?因爲目前這種方式會導致應用在屏幕上移除另一個時崩潰。 – user1569940

+0

你可能會遇到線程問題,或者如果你真的搞砸了,那麼在迭代它的時候你會從數組中移除對象。 我建議您創建需要刪除的第二個子彈數組。然後刪除那些安全的地方。 – HalR