2013-05-21 113 views
0

這裏是一個圖像(我無法發佈)顯示我要在XNA遊戲中做什麼,我想檢查玩家是否在區域範圍內,如果是,然後攻擊玩家,我試圖使用檢查射線來做到這一點,但它很奇怪,並給出空結果,因爲玩家必須在敵人面前才能被偵測到! ! [在這裏輸入的形象描述] [1]追逐,區域範圍

if (enemyRay.Intersects(cci.CharacterController.Body.CollisionInformation.BoundingBox) <= 200) 
     { 
      RunController(dwarfAnimatior, dwarfwalk); 
      dwarfChrachterController.Body.ApplyImpulse(dwarfChrachterController.Body.OrientationMatrix.Forward, 
       Vector3.Normalize(enemyRay.Direction) * 50.0f); 
      if (enemyRay.Intersects(cci.CharacterController.Body.CollisionInformation.BoundingBox) <= 50) 
      { 
       sound.playAh(); 
      } 
     } 
+0

向我們顯示您的代碼。 –

+0

羅伯特感謝,我想它爲3D而不是2D,我已經發布了上面的代碼,如果您可以發佈代碼,我需要每個玩家的視角而不是圈子:) –

回答

0

你需要做兩件事情:

  1. 檢查玩家的位置和敵人 位置之間的距離。

  2. 檢查由玩家和敵人& 在玩家視野的方向指向線之間的線形成的角度小於 180degrees。

首先是容易的:

bool isCloseEnoughToAttack = Vector.Magnitude(Math.abs(player.position - enemy.position)) < distanceToStartAttacking 

第二個是一個比較複雜的。只要你不必真的講究什麼「在前方的球員」的意思,你可以很容易檢查的角度是不是落後了檢查點積大於0:

bool isInFrontOfPlayer = Vector.DotProduct(Vector.Normalize(player.position - enemy.position), player.lookAtDirection) > 0 

注 - 這段代碼是psudeocode,我不知道變量/庫的確切名稱;但它應該非常相似。