【问题标题】:Rotating an image gradually from one degree to another将图像从一个角度逐渐旋转到另一个角度
【发布时间】:2011-08-21 05:01:12
【问题描述】:

这是我的第一篇文章,所以请多多包涵。我会尽量清楚地说明我的问题。 首先,让我说我数学很烂。我在学校失败了,我无法掌握简单的数学概念,这让我非常痛苦,尤其是因为我喜欢编码。有人想编程,但不能执行基本的数学运算?糟糕的组合。 Aaa无论如何,直奔问题。

一些上下文。我正在写一个小行星类型的游戏。进展非常顺利,到目前为止,感谢这个网站(谢谢!)和谷歌,我已经克服了所有的障碍。我一直在寻找解决问题的方法,但似乎总是遇到一个不起作用的解决方案,或者我只是不理解并且无法将其合并到我的代码中。

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

我想要做的是逐渐将船转向用户想要去的角度,使用最短的转弯,向左或向右。在我的脑海中,我在想“我该怎么说......从 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();

因此,在每个游戏时间点上,我都想将飞船逐渐转向玩家想要去的任何方向。对此的任何帮助将不胜感激!

感谢阅读!

【问题讨论】:

标签: java android math android-canvas


【解决方案1】:

在您的刻度函数中,而不是: 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;

【讨论】:

  • 这是朝着正确方向迈出的一大步。谢谢!一些问题。有时船会失去控制。一旦指向正确的方向,船就会“摇晃”。我假设这与浮点数和舍入有关。
  • 不确定旋转,但我编辑了代码以减少抖动。根据自己的喜好调整“软糖”。
  • “软糖”效果很好,再次感谢。仍在寻找失去控制的船。我有一个想法。您是否认为我的代码中的 canvas.rotate((float) (fAngle + 90) 搞砸了这个?我有一半在想我应该摆脱它,修复图像(在位图本身中旋转它),也许那个会修吗?
  • 不知道该说什么关于纺纱。我很难从这里调试。 ;) 似乎操纵杆输入有点不稳定。
  • 这里做一点调试。 user.fAngle 变为负数,这当然完全搞砸了。
猜你喜欢
  • 2016-10-19
  • 2012-02-17
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
  • 2021-04-12
  • 2010-12-19
  • 2016-08-21
  • 1970-01-01
相关资源
最近更新 更多