java - 将图像从一个角度逐渐旋转到另一个角度

标签 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();

因此,在每个游戏刻度上,我都想将船转向玩家想要去的任何方向,一个度一个度。对此的任何帮助将不胜感激!

感谢阅读!

最佳答案

在你的 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;

关于java - 将图像从一个角度逐渐旋转到另一个角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7136479/

相关文章:

java - 好奇是否可以通过正则表达式替换来实现这一点

android - Android-应用程序崩溃

android - 将 TableLayout 转换为 RecyclerView

java - 安卓 : How To Sort An Arraylist of Special Characters Alphabetically?

Java:生成具有对数分布的随机数

c - O(1) 代码来计算一个范围内数字的倍数?

java - 使用开源 api 将 java 对象转换为 xml 的最佳方法是什么

java - 从 Java webapp 子目录提供静态文件

java - 使用nodejs模拟soapUI签名请求

algorithm - 找到完全改变累积和集的排列