2016-09-26 15 views
0

그래서 내 문제는 내 게임에 팀에 두 적을 가지고 일어나고있다. 1 대 1 인 경우 .. 문제가 발생하지 않습니다.배열 변경 중에

내 코드를보고 왜이 치명적인 오류가 발생하는지 수집 할 수 있는지 확인하십시오.

은 대상 여부를

있어 여부를 결정하기 위해 업데이트에서 배열

-(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)removeTarget:(PlayerClass *)target withSender:(PlayerClass *)sender { 
    if ([sender.targets containsObject:target]) { 
     [sender.targets removeObject:target]; 
    } 
} 

을 추가 대상에서 대상을 제거합니다

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

내 문제가 해결되었지만 문제가되지 않았습니다. 따라서 제거 후 열거합니다.