2014-03-27 4 views
0
for (int i = 0; i < playerBullets.size(); i++) 
    { 
     // Ship projectile hit enemy 
     if (IntersectsWith(playerBullets[i].ReturnBoundingBox()) || IntersectsWith(playerBulletsTwo[i].ReturnBoundingBox())) 
     { 
      //Deal with enemies response to collision 
      //Do damage 
      Damage(); 

      if (ReturnHealth() <= 0) 
      { 
       this->mobsKilledCounter++; 
       SetCurrentTexture(currentTextureKey); 
      } 
     } 
    } 

총알이 적을 때리면 코드가 실행되어 손상됩니다 (원하는대로). 그런 다음 똑같은 탄환 (1000 회/초)에이어서 코드를 연속적으로 실행하여 적을 즉시 죽입니다. 이 코드는 업데이트 루프에 있으며,이 코드는 계속해서 업데이트됩니다.적과 너무 자주 교차하는 총알

아무도 내가 이것을 막을 수 있습니다. 나는 불법 복제를 시도했지만 벡터와 여러 개의 탄환/적을 사용하기 때문에 너무 잘 작동하지 않았습니다.

+1

교차로 코드가 자주 점검되는 경우 잠시 동안 총알이 여전히 내부에있을 수 있다는 것이 합리적이지 않습니까? 동일한 총알이 적을 두 번 때리는 것을 명시 적으로 방지해야합니다. 총알은 그것이 쳤던 적을 추적 할 수 있으며 두번 똑같은 공격을받는다면 피해를주지 마십시오. ** 편집 : ** 또는 적과 충돌 할 때 총알을 버리십시오. 그렇지 않으면 초입 관탄입니다. – AndyG

답변

1
나는 당신이 당신의 "총알"객체를 전달하는 방법을보고, 어쩌면 "업데이트 루프"를 참조하십시오,하지만 난 거기에 몇 가지 제안을 던질 것이다 필요가

:

1 -에 파괴 이러한 "총알"인가 충돌? 루프가 계속 실행 중이고 총알이 계속 있으면 루프가 실행될 때마다 충돌하고있는 오브젝트를 "종료"할 때까지 감지되어 피해가 처리됩니다!

2 - 플레이어가 초당받을 수있는 손상 정도를 알려주는 쿨 다운 타이머를 생각해 보셨습니까? 총알에 "bool has_dealt_damage_to_player"플래그가 있습니까?

또한 무엇을하고 있는지 전혀 알 수 없습니다. this-> mobsKilledCounter ++; 행운을 빈다. 어쩌면 괜찮은 디버거를 사용해 볼까요? 어떤 IDE에서 일하고 있습니까?

+0

고마워요! 나는 제안 하나를 생각조차하지 못했다. 내 총알은 계속 흘 렀어. 제언 1은 완벽하게 일했습니다. – sitBy

관련 문제