2017-06-02 308 views
0

我正在編寫一個代碼,其中舞臺上有不同的環,並且一個球在這些軌道之一中旋轉。點擊後,球離開環,並正常運行到環。在途中,如果它擊中另一個環,它將從該環擊中的那個點開始旋轉。我可以成功編寫代碼的最初部分。但是當球擊中另一個環時,我遇到了問題,它不是從它擊中的位置開始的。相反,它會從不同的位置開始在環中旋轉。我希望我清楚地懷疑。這有點類似這個遊戲https://play.google.com/store/apps/details?id=com.drgames.orbit.jumper旋轉角度計算AS3

這裏是我的代碼輸入框:

if(!isTravelling){ 
     rad = Math.abs(angle * (Math.PI/180)); // Converting Degrees To Radians 
     _ball.x = currOrbit.x + (currOrbit.width/2) * Math.cos(rad); // Position The Orbiter Along x-axis 
     _ball.y = currOrbit.y + (currOrbit.width/2) * Math.sin(rad); // Position The Orbiter Along y-axis 
     trace(_ball.x+" , "+_ball.y); 
     angle -= speed; // Object will orbit clockwise 
     _ball.rotation = (Math.atan2(_ball.y - currOrbit.y, _ball.x - currOrbit.x) * 180/Math.PI) + 90; 
    } 

    for(var i = 0; i < orbits.length; i++){ 
     if(orbits[i] != currOrbit){ 
      if(ObjectsHit(orbits[i], _ball)){ 
       currOrbit = orbits[i]; 
       _ball.rotation = (Math.atan2(_ball.y - currOrbit.y, _ball.x - currOrbit.x) * 180/Math.PI) + 90; 
       isTravelling = false; 
       stage.addEventListener(MouseEvent.CLICK, onClick); 
      } 
     } 
    } 

    if(isTravelling){ 
     _ball.x += Math.cos(rad) * speed * 2; 
     _ball.y += Math.sin(rad) * speed * 2; 
    } 

回答

1

你似乎已經忘了計算起始角度爲新的軌道:

if(!isTravelling){ 
     rad = Math.abs(angle * (Math.PI/180)); // Converting Degrees To Radians 
     _ball.x = currOrbit.x + (currOrbit.width/2) * Math.cos(rad); // Position The Orbiter Along x-axis 
     _ball.y = currOrbit.y + (currOrbit.width/2) * Math.sin(rad); // Position The Orbiter Along y-axis 
     trace(_ball.x+" , "+_ball.y); 
     _ball.rotation = angle // no need for calculating the angle again 
     angle -= speed; // Object will orbit clockwise 
    } 

    for(var i = 0; i < orbits.length; i++){ 
     if(orbits[i] != currOrbit){ 
      if(ObjectsHit(orbits[i], _ball)){ 
       currOrbit = orbits[i]; 
       angle = (Math.atan2(_ball.y - currOrbit.y, _ball.x - currOrbit.x) * 180/Math.PI) + 90; // Calculate the starting angle on the new orbit 
       _ball.rotation = angle // Set the balls rotation to the angle 
       isTravelling = false; 
       stage.addEventListener(MouseEvent.CLICK, onClick); 
      } 
     } 
    } 

    if(isTravelling){ 
     _ball.x += Math.cos(rad) * speed * 2; 
     _ball.y += Math.sin(rad) * speed * 2; 
    } 

這應該修復它。請注意,您可能需要爲球的旋轉增加或減少90度(_ball.rotation = angle + 90),因爲我不是100%確定的。