旋转角度计算AS3

时间:2017-06-02 10:54:30

标签: actionscript-3 rotation angle

我正在编写一个代码,其中舞台上有不同的环,并且球在其中一个轨道中旋转。点击后,球离开其环并正常行进到环。如果它碰到另一个环,它就会从它击中环的点开始在该环中旋转。我可以成功编写代码的初始部分。但是当球撞到另一个环时,我遇到了问题,它不会从它击中的位置开始。相反,它开始在环中从不同的位置旋转。我希望我对此表示怀疑。它有点类似于这个游戏https://play.google.com/store/apps/details?id=com.drgames.orbit.jumper

这是我输入框架中的代码:

    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 个答案:

答案 0 :(得分:1)

您似乎忘记了计算新轨道的起始角度:

setInterval

这应该解决它。请注意,您可能需要在球旋转中添加或减去90度(_ball.rotation = angle + 90),因为我不是100%确定。