2014-03-29 2 views
0

현재 xna에서 톱 다운 슈터를 만들고 있습니다. 나는이 상수 문제를 프로젝트에서 꽤 자주 회피 할 수 있었지만 지금은 게임 플레이를 프로그래밍하고 있으며 충돌로 인해 고생하고있다. 나는 플레이어가 적과 접촉하면 생명력이 1만큼 내려 가기를 원하지만 사각형이 교차하면 소프트웨어의 새로 고침 률에서 호출됩니다 (또는 이제는 생각했습니다). 따라서 플레이어 실제로 두 번째 교차로에서 수십 명이 내려갑니다. 이것을 막을 수있는 방법이 있습니까? 작동하지 않는XNA : 최초 교차로에서만 직사각형 교차를 호출합니다.

예제 코드 :

  if (playerRectangle.Intersects(enemyRectangle)) 
      { 
       enemyAlive = false; 
       playerLives--; 
      } 

나는이 간단한 것 알고 있지만, 일주일 내내 내 게임 덤비는되었습니다. 도움이나 조언을 미리 보내 주셔서 감사합니다!

답변

2
이 당신의 상태를 변경

:

(playerRectangle.Intersects(enemyRectangle) && enemyAlive) 

하고 당신을 위해 트릭을 할해야합니다.

편집 :

(enemyAlive && playerRectangle.Intersects(enemyRectangle)) 

내가 Intersects 방법은 모두 4 개면으로 플레이어의 사각형의 4 개면을 확인해야한다고 지적합니다 : Zhafur가 지적했듯이, 간단한 할 수있는 최적화가 적의 직사각형. 그러면이 간단한 호출을 16 개의 작은 수표와 같은 것으로 만들 수 있습니다. 누군가가 그 인물을 확실하게 알고 있다면 내가 잘못하면 나를 바로 잡으십시오.

float playerSize = 16f; // These are the _radius_ not the diameter. 
float enemySize = 16f; 

다음 Vector2.Distance에 전화로 상태로 Intersects 방법을 대체 : 개인적으로 나는 이런 식으로 뭔가를 할 것 playerLocation 및 enemyLocation가 중심점을 나타냅니다

(enemyAlive && (playerSize + enemySize >= Vector2.Distance(playerLocation, enemyLocation))) 

플레이어의 및 적.

+0

enemyAlive를 확인하고 이것이 맞으면 두 직사각형이 교차하는지 확인하십시오. 성능면에서 더 현명합니다. :) +1 – Zhafur

+0

오, 이런, 정말 고마워! 저건 완벽 해! 나는 그것이 매우 단순한 haha이었던 것을 약간 격노하게하고있다. 충분히 고마워 할 수 없어! – FJLyons

+1

@ Zhafur : 동의하지만이 상황을 처리 할 수있는 다른 방법이 있습니다. 최적화를 반영하기 위해 편집을 추가하겠습니다. – bubbinator