2016-09-26 11 views
0

私の問題は、私のゲームのチームに2つの敵を持っている場合にのみ起こっています。それが1対1の場合..私は問題を取得しません。配列の突然変異が列挙されている間に

私のコードを見て、なぜ私がこの致命的なエラーを受けているのかを知ることができるかどうかを見てください。

は、アレイ

-(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; 
       } 
      } 
     } 

私の問題は解決しましたが、私は壊れていませんでした。したがって、除去後に列挙する。

関連する問題