2

我正在制作一个 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();

你可能知道,像这样画我的火会让它围绕自己的中心旋转,就像我的角色一样。但我希望它围绕我的角色旋转,这样看起来火是从他的枪里出来的。

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

4

2 回答 2

2

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

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 是火焰距离角色中心的角度。这不太正确,因为它会跟踪火焰图像的角落,而不是中心。我认为这可以很容易地解决。如果没有,我会尽快改变。

于 2012-09-12T20:34:41.547 回答
1

你可以使用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();

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

于 2012-09-12T20:54:32.800 回答