2011-11-03 106 views
1

我有這個問題:有這個敵人旋轉到我的玩家。當用我的玩家「圍繞」敵人時,我可以看到敵人正朝着我的玩家旋轉。 然後敵人突然轉過360度,再次面對我的玩家。我不知道爲什麼它會發生這種奇怪的360度轉彎,但是每當我繞過敵人幾秒時就會發生。請 - 有人可以幫我解決這個問題嗎?我很欣賞我能得到的每一個提示,因爲我不知道問題出在哪裏。敵人旋轉很奇怪

tempEnemy.dX = tempEnemy.x - player.x; 
tempEnemy.dY = tempEnemy.y - player.y; 

tempEnemy.rotateTo = toDegrees(getRadians(tempEnemy.dX, tempEnemy.dY)); 



if(tempEnemy.frame < 0) tempEnemy.frame += 360; 
if(tempEnemy.frame > 359) tempEnemy.frame -= 360; 


tempEnemy.trueRotation = int((tempEnemy.rotateTo - tempEnemy.frame)/tempEnemy.rotateSpeed); 

tempEnemy.vX += (player.x - tempEnemy.x)/tempEnemy._speed; 
tempEnemy.vY += (player.y - tempEnemy.y)/tempEnemy._speed; 

tempEnemy.vX *= tempEnemy.decay; 
tempEnemy.vY *= tempEnemy.decay; 

更新:

private function toDegrees(radians:Number):Number 
    { 
     var degrees:Number = Math.floor(radians * 180/Math.PI); 
     //trace (degrees); 
     return degrees; 
    } 

private function getRadians(deltaX:Number, deltaY:Number):Number 
    { 
     var radian:Number = Math.atan2(deltaY, deltaX); 

     if (deltaY < 0) 
     { 
      radian += (2 * Math.PI); 
     } 
     return(radian); 
    } 
+0

你可以發佈你的getRadians函數嗎? –

+0

我更新了我的代碼。我插入ToDegrees和getRadians。希望這可以幫助。 – drpelz

回答

1

沒有看到你的getRadians功能,也許你傳遞360°計算反射角度?

也許是這樣的:

var degrees:Number = Math.atan2(tempEnemy.y - player.y, tempEnemy.x - player.x) * 180/Math.PI; 
var delta:Number = degrees - tempEnemy.rotation; 

while (delta <= -180) 
    delta += 360; 
while (delta > 180) 
    delta -= 360; 

補償degrees與你的敵人顯示對象設計的休息角。

+0

謝謝 - 我會檢查一下。我更新了我的代碼並插入到了代碼並獲取了Radians。 – drpelz

1

這聽起來像你已經使用時間線補間。使用補間代碼,或者抓住我在這裏使用的補間http://flexdiary.blogspot.com/2010/04/sample-code-for-oop-timeline-insideria.html。我不記得我做了什麼來使時間線變成完整的循環,而不是在重新啓動之前扭回來,但是您應該能夠導出並重新使用補間。

如果要使用補間代碼,可以使用Flash的內置補間類或使用像Tweensy這樣的庫。

+0

謝謝!:)我會檢查一下! – drpelz