【问题标题】:Android rotating one bitmap around anotherAndroid围绕另一个位图旋转
【发布时间】:2012-09-12 20:06:57
【问题描述】:

我正在制作一个 2d 游戏,其中我的角色由操纵杆控制,我使用 canvas.rotate(angel, x, y) 旋转他。我的角色朝他前进的方向射击,现在我想在他射击时增加他的步枪射出的火力。问题是,如何围绕我的角色旋转这个火焰图像?

我如何旋转我的角色:

    canvas.save();
    canvas.rotate((float) controls.getAngle(), controls.charPosition.x + charBitmap.getWidth() / 2, controls.charPosition.y + charBitmap.getHeight() / 2);
    character.draw(canvas, controls.charPosition.x,controls.charPosition.y);
    canvas.restore();

我如何旋转火焰:

        canvas.save();
        canvas.rotate((float) controls.getAngle(), controls.charPosition.x + (fireBitmap.getWidth()) / 2, controls.charPosition.y + (fireBitmap.getHeight() / 2));
        fire.draw(canvas, controls.charPosition.x, controls.charPosition.y);
        canvas.restore();

您可能知道,像这样绘制我的火会使其围绕自己的中心旋转,就像我的角色一样。但我希望它围绕我的角色旋转,这样看起来就好像火从他的枪里出来了。

有什么想法吗?如果有任何不清楚的地方,请在评论中告诉我。谢谢!

【问题讨论】:

    标签: android canvas bitmap rotation 2d


    【解决方案1】:

    我将尝试调整此答案,使其更具体,但如果我理解正确,您可能不想旋转画布来创建火的旋转。相反,您可能希望使用相对于角色位置的三角函数来描述它。所以我认为它看起来像你画的角色。

    canvas.save();
    canvas.rotate((float) controls.getAngle(), controls.charPosition.x + charBitmap.getWidth() / 2, controls.charPosition.y + charBitmap.getHeight() / 2);
    fire.draw(canvas, controls.charPosition.x+(fireRadius*cos(fireAngle)),controls.charPosition.y+(fireRadius*sin(fireAngle));
    canvas.restore();
    

    在这段代码中,fireRadius 是您希望火焰图距角色中心多远,而 fireAngle 是火焰距离角色中心的角度。这不太正确,因为它会跟踪火焰图像的角落,而不是中心。我认为这可以很容易地解决。如果没有,我会尽快改变。

    【讨论】:

      【解决方案2】:

      您可以使用Canvas.translate(dx, dy)。想法是把火移到离枪一定距离的地方,可以直接沿着x轴,然后围绕枪中心旋转Canvas。这导致火在距枪的给定距离处旋转给定角度。

      canvas.save();
      canvas.rotate((float) controls.getAngle(), controls.charPosition.x + (fireBitmap.getWidth()) / 2, controls.charPosition.y + (fireBitmap.getHeight() / 2));
      canvas.translate(distanceFromGun, 0);
      fire.draw(canvas, controls.charPosition.x, controls.charPosition.y);
      canvas.restore();
      

      请注意顺序。画布矩阵运算是预乘法,虽然翻译是在代码后面进行的。

      【讨论】:

      • 这成功了!非常简单易懂的解决方案。谢谢你好先生!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      相关资源
      最近更新 更多