慢角度旋转

时间:2012-05-22 04:32:25

标签: java slick2d

显然,即使我已经通过微积分3,我的三角也非常失败(我可能甚至不能称之为触发,这只是基本的数学运算)。 所以基本上我有一堆旋转的图像,我不希望它是即时的。 我知道如何让它旋转缓慢,但我不知道如何计算它应该转向哪种方式。

因此,如果我要转向的target角度低于179度,则转向一个方向。 如果超过180度,则转向另一个方向。我不确定我是否说得对,但我基本上只想让它用最短的距离旋转。 想想我认为的导弹导弹。

我有两种寻找角度的方法,一种方法是使用如下所示的矢量:

hero = new Vector2f(this.x, this.y);
target = new Vector2f(mouseX, mouseY);
target.sub(hero);

// Calculates the rotation
finalRotation = (int) target.getTheta();

另一种方法是使用atan2(看起来更简单,我意识到我可以将它缩短为一个return语句):

direction = Math.atan2(player.x - this.x, player.y - this.y);
return (int) Math.toDegrees(direction);

我认为找到最短旋转的方法对两者都有效。我已经尝试了一些试验和错误的事情,我只是难倒了。 帮助我毫无价值的编程技巧!任何帮助表示赞赏!

修改 我实际忘记提到的是我指向鼠标。 因此,如果我的鼠标与我的'image'(即播放器)的角度为200,并且播放器当前面向19, 我如何确定它应该变为200还是下降到0,转移到360并继续下降到200.

DOUBLE EDIT: 所以我有一个我想要的工作版本,但由于某种原因,最终和当前的旋转关闭了180,它导致我的角色永远不会停止抽搐。 明天我将不得不继续努力。由于我的精灵最初旋转的方式,我必须在最后从currentRotation减去90.

TRIPLE EDIT: 好的,所以我的增量和减量语句被反转,因此它试图超过180然后反转方向。我已经完善了它!

mouseX = input.getMouseX();
mouseY = input.getMouseY();

hero = new Vector2f(this.x, this.y);
target = new Vector2f(mouseX, mouseY);
target.sub(hero);

// Calculates the rotation
finalRotation = (int) target.getTheta();

if(!(currentRotation <= finalRotation + 1 && currentRotation >= finalRotation - 1)) {
    double tempVal;

    if (currentRotation < finalRotation) {
        tempVal = finalRotation - currentRotation;

        if (tempVal > 180) {
            currentRotation -= .3 * delta;
        } else {
            currentRotation += .3 * delta;
        }
    } else if (currentRotation > finalRotation) {
        tempVal = currentRotation - finalRotation;

        if (tempVal < 180) {
            currentRotation -= .3 * delta;
        } else {
            currentRotation += .3 * delta;
        }               
    }
}

if (currentRotation < 0)
    currentRotation = 359;

if (currentRotation > 360)
    currentRotation = 1;

this.setAngle((int) (currentRotation+90));

输入内容和向量来自Slick2D。

1 个答案:

答案 0 :(得分:3)

if (finalRotation >= 180) finalRotation = 360 - finalRotation;

对于任何180°或以上的角度,这将反转方向。