2016-09-26 67 views
0

所以我的问题只发生在我的队伍中有两个敌人时。如果这是一个对一个..我不明白这个问题。阵列突变,同时被列举

请看我的代码,看看你能不能收集为什么我得到这个致命的错误。

删除目标从玩家目标阵列

-(void)removeTarget:(PlayerClass *)target withSender:(PlayerClass *)sender { 
    if ([sender.targets containsObject:target]) { 
     [sender.targets removeObject:target]; 
    } 
} 

再添目标玩家目标阵列

-(void)addTarget:(PlayerClass *)target withSender:(PlayerClass *)sender { 

    //check if target already exists 

    if ([sender.targets count] > 0) { 
     for (PlayerClass *players in sender.targets) { 
      if ([players.name isEqualToString:target.name]) { 
       //Checked if exists, if target exists in list then move on. 
       goto outer; 
      } 
     } 
    } 

    [sender.targets addObject:target]; 

    outer:; 
} 

在更新,以确定它们是否是一个目标或没有

-(void)update:(CFTimeInterval)currentTime { 
/* Called before each frame is rendered */ 

for (PlayerClass *player in _players) { 
    .... 

    if (player.health > 0) { //If player is alive! 

     .... 
     //Checks if the player has targets, if so & visible - Engage. 
     if ([player.targets count] > 0) { 
      for (PlayerClass *enemy in player.targets) { 
       if (![player.team isEqualToString:enemy.team]) { 
        if (enemy.health > 0) { 
         if ([self lineOfSightBetweenPlayers:player andPlayer:enemy]) { 
          [self attackWithPlayer:player againstPlayer:enemy]; 
          break; 
         } else { 
          [player removeTarget:enemy withSender:player]; 
         } 
        } else { 
         [player removeTarget:enemy withSender:player]; 
        } 
       } else { 
        [player removeTarget:enemy withSender:player]; 
       } 
      } 
     } 


    } 

现在从调试我收集到玩家不会将他们的队友添加为目标。但是,如果玩家能够看到对方球队中的多个目标,则他们将收集多个目标。然而,我猜的问题在于我的技术从数组中删除目标?任何人都可以检查并确保我没有在这里发送一个学校男孩的错误?

在此先感谢。

回答

0

很简单的修复。当代码开始变得非常庞大时,往往会发生这种情况!

 //Checks if the player has targets, if so & visible - Engage. 
     if ([player.targets count] > 0) { 
      for (PlayerClass *enemy in player.targets) { 
       if (![player.team isEqualToString:enemy.team]) { 
        if (enemy.health > 0) { 
         if ([self lineOfSightBetweenPlayers:player andPlayer:enemy]) { 
          [self attackWithPlayer:player againstPlayer:enemy]; 
          break; 
         } else { 
          [player removeTarget:enemy withSender:player]; 
          break; 
         } 
        } else { 
         [player removeTarget:enemy withSender:player]; 
         break; 
        } 
       } else { 
        [player removeTarget:enemy withSender:player]; 
        break; 
       } 
      } 
     } 

解决了我的问题,我没有突破。因此在删除后列举。