2

ミサイル砲塔の bufferedImage を回転させて、ターゲットを追っているように見せようとしています。基本的には AffineTransform/ affinetransform で簡単にできます

一言で言えば私の現在のコードは次のとおりです。

public BufferedImage tower = null;

try
        {
            tower = ImageIO.read(SpriteSheet.class.getResource("/spriteSheet/testTower.png"));
        }
        catch(IOException e)
        {


AffineTransform tx = AffineTransform.getRotateInstance(rotationRequired, locationX, locationY);
AffineTransformOp = op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);

//then I draw it using  

g.drawImage(op.filter(tower, null), towerLocationX, towerLocationY, null);

これは機能しますが、私がやりたいのは、bufferedImage を変換 (回転) し、新しく回転したピクセル データをピクセル配列にコピーしてから画面に描画することです。 png を画面に直接表示します。

しかし、私は何を知っていますか。2D ゲームは回転する画像を正確にどのように描画しますか? 私はそれを正しく行っていますか、またはこれを行うためのより良い/よりメモリ効率の良い方法はありますか?

4

1 に答える 1

0

2D ゲームで画像操作に取り組む方法はたくさんあります。ただし、最適化する前に、そもそもそれが本当に必要かどうかを自問する必要があります。さらに、メモリの最適化は通常、CPU パフォーマンスを犠牲にして行われ、その逆も行われます。

CPU 時間が問題である場合、一般的なアプローチは、既に特定の角度に回転された (事前に計算された) 画像の配列を保持することです。

メモリに問題がある場合は、単一の画像を保持し、表示されるたびに回転したフォームを計算します。さらにメモリ効率が良く、CPU を消費するアプローチは、画像ではなくベクトル形状を描画することです。これにより、変換時に画像に使用される平滑化アルゴリズムの補間よりも見栄えの良い結果が得られます。Java は SVG をサポートしており、いくつかの優れたパッケージが利用可能です (例: http://xmlgraphics.apache.org/batik/ )。

最後に、Java をグラフィック ライブラリに接続してレンダリングを実行できるため、パフォーマンスが向上します。このようなライブラリ (OpenGL など) は、グラフィック カードのメモリを使用して画像を保存し、CPU 使用率を改善します ( http://jogamp.org/jogl/www/ )。

于 2014-03-10T14:09:36.277 に答える