2015-09-17 113 views
0

我正在開發一款2D戰鬥機,試圖設計敵方AI。人工智能非常簡單:將敵人轉向玩家,並向前飛行。我已成立了一個函數,則玩家的位置,並返回旋轉值的敵人應該儘量做到直接在他們飛行,如下:Actionscript 3 - 向另一個對象旋轉一個對象

 public function getFlyAngle(player:PlaneGeneric):Number 
    { 
     var playerX:Number = player.x; 
     var playerY:Number = player.y; 
     var xDistance:Number = playerX - x; 
     var yDistance:Number = playerY - y; 
     var slope:Number = yDistance/xDistance; 
     var angle:Number = 180/Math.PI * Math.atan(slope); 

     if(slope < 0 && yDistance < 0 || 
      slope > 0 && yDistance > 0) 
      angle += 90; 
     else if(slope < 0 && yDistance > 0 || 
       slope > 0 && yDistance < 0) 
      angle += 270; 

     return angle; 
    } 

這將返回0之間的值(含)和360(獨佔),它表示在參與者飛機上直接飛行時,rotateReference對象的旋轉角度。

這個問題出現在函數中:我只是將它的當前旋轉與它需要飛行的角度進行比較,然後添加或減去我想要的固定量(9)以使當前旋轉更接近期望的旋轉。

public function turnTowardsPlayer(player:PlaneGeneric):void 
    { 

     var angleToPlayer:Number = getFlyAngle(player); 
     var rotation360:Number = rotateReference.rotation; 
     if(rotateReference.rotation < 0) 
      rotation360 = (360 - (rotateReference.rotation * -1)); 

     trace("angleToPlayer: " + angleToPlayer + ", rotation360: " + rotation360); 

     if(angleToPlayer - 9 < rotation360 && rotation360 < angleToPlayer + 9); 
     else if(rotation360 > angleToPlayer) 
     { 
      rotateReference.rotation -= 9; 
      if(currentFrame == 1) 
       gotoAndStop (totalFrames); 
      else 
       prevFrame(); 
     } 
     else if(rotation360 < angleToPlayer) 
     { 
      rotateReference.rotation += 9; 
      if(currentFrame == totalFrames) 
       gotoAndStop(1); 
      else 
       nextFrame(); 
     } 

問題出現在玩家飛過敵機時,angleToPlayer值突然從360跳到〜0。因爲0遠小於飛機的300°旋轉值,所以它開始旋轉很長的距離以嘗試再次匹配角度。

這似乎是一個簡單的問題,但我一直抨擊我的頭反對這麼長時間,我覺得我需要一個新的眼睛來幫助我寫修復。

謝謝你的時間。

+1

旋轉是有點混亂,因爲事件度是0-360,旋轉返回-180到180.嘗試轉換'角度'到那個,這裏是超好的[解釋](http://gamedev.michaeljameswilliams.com/2009/ 4月25日/角度-在閃光/) – kaarto

回答

0

如果角度差大於180,則從中減去360。

例.... 350 - 10 = 340(你知道這是超過半圈),以減... 340 - 360 = -20(實際差別你想要的)

希望有所幫助。請記住,您總是可以在同一個地點結束的圓圈上添加或減去360 b/c!

相關問題