逐渐将图像从一度旋转到另一度

时间:2011-08-21 05:01:13

标签: java android math android-canvas

这是我的第一篇文章,所以请耐心等待。我会尝试尽可能清楚地了解我的问题。 首先,让我说我吮吸数学。我在学校里失败了,让我感到痛苦,我无法掌握简单的数学概念,特别是因为我喜欢编码。有人想编程,不能执行基本的数学运算?糟糕的组合。 Aaaanyway,关于这个问题。

一些背景。我正在写一个小行星型游戏。它来得非常好,到目前为止,我已经克服了所有障碍,感谢这个网站(谢谢!)和谷歌。我已经搜索了我的问题的解决方案,但似乎总是遇到一个无法正常工作的解决方案,或者我只是不理解并且无法将其合并到我的代码中。

该问题涉及船舶的轮换。我有一个屏幕操纵杆类,它返回操纵杆被推动的角度。我用这个角度将船指向同一个方向。

我想要做的是逐渐将船转向用户想要去的角度,使用最短的左转或右转。在我的脑海里,我在想“我该怎么说呢?从5度向350度,向左走?”。我不知道......

这是我的抽奖代码:

public void draw(Canvas canvas){
    canvas.save();
    canvas.rotate((float) (fAngle + 90), (float) (dX + (mShip.getIntrinsicWidth() / 2)), (float) (dY + (mShip.getIntrinsicHeight() / 2)));
    mShip.setBounds((int)dX, (int)dY, (int)dX + mShip.getIntrinsicWidth(), (int)dY + mShip.getIntrinsicHeight());
    mShip.draw(canvas);
    canvas.restore();
}

角度从操纵杆getangle方法传递给fAngle变量。然后,由于图像朝向,角度增加90度。

user.fAngle = oJoystick.getAngle();

所以在每场比赛中,我都希望将球转向球员想要去的任何方向,逐个度数。任何有关这方面的帮助将不胜感激!

感谢阅读!

1 个答案:

答案 0 :(得分:1)

在您的tick功能中,而不是:     user.fAngle = oJoystick.getAngle();

使用此功能(根据您的喜好调整增量 - 这可控制旋转速度):

const float increment = 1.0;
float direction;
float joy = oJoystick.getAngle();
float ang = user.fAngle;
float fudge = 5.0;

if (abs (joy - ang) > fudge) {
    if (joy > ang) {
        if (joy - ang < 180)
            direction = 1;
        else
            direction = -1;
    } else if (joy < ang) {       
        if (ang - joy < 180)
            direction = -1;
        else
            direction = 1;
    }
} else // already pointing right direction
    direction = 0;

user.fAngle = ang + direction * increment;
if (0 > user.fAngle)
    user.fAngle += 360;
if (360 < user.fAngle)
    user.fAngle -= 360;