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 に答える