2017-07-04 3 views
0

画像の一部を回転、拡大縮小、平行移動したいと思います。たとえば、私はスプライトの列と行を持つスプライトシートを持っています。一時的なBufferedImageに必要な部分を描画し、その一時的なイメージをメインのグラフィックに変換することができますが、これは非常に遅い操作です。Javaの画像セクションをすばやく回転させる

これをもっと速くするにはどうすればよいですか?毎秒100回以上60回以上発生する必要があります。

public void Draw_WorldSpace(Graphics2D g, double x, double y, double angle, double deltaTime) { 
    // setup portion of image to transform 
    BufferedImage tempImage = new BufferedImage(sourceRectangle.width, sourceRectangle.height, BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g2 = tempImage.createGraphics(); 
    g2.drawImage(image, 0, 0, sourceRectangle.width, sourceRectangle.height, sourceRectangle.x, sourceRectangle.y, sourceRectangle.width, sourceRectangle.height, null); 
    g2.dispose(); 

    // setup a transformation object 
    AffineTransform transform = new AffineTransform(); 
    // match view rotation 
    transform.translate(GameLogic.viewPort.GetCanvasCenter().x, GameLogic.viewPort.GetCanvasCenter().y); 
    transform.rotate(Math.toRadians(GameLogic.viewPort.GetAngle())); 
    transform.translate(-GameLogic.viewPort.GetCanvasCenter().x, -GameLogic.viewPort.GetCanvasCenter().y); 
    // set to position 
    transform.translate(x - GameLogic.viewPort.GetViewPortCenter().x + GameLogic.viewPort.GetCanvasCenter().x, y - GameLogic.viewPort.GetViewPortCenter().y + GameLogic.viewPort.GetCanvasCenter().y); 
    // rotate 
    transform.rotate(Math.toRadians(angle)); 
    // center on sprite 
    transform.translate(-sourceRectangle.width/2, -sourceRectangle.height()/2); 
    // draw the sprite 
    g.drawImage(tempImage, transform, null); 
} 
+0

これを事前に行い、回転したスプライトを 'List 'に保存します。 –

+1

サブイメージで実行するのではなく、 "メイン"グラフィックスで直接変換を実行できますか? – MadProgrammer

+0

6 kHzを超えるものは何が必要ですか? – trashgod

答えて

0

最終的に私はHovercraft Full Of Eelsを提案しました。私はソリューションの最大のファンではありませんでした。なぜなら、メモリのオーバーヘッドが非常に多いからです。しかし、究極的には、それは魅力的なように機能し、グラフィックスをより合理化して制御するため、本当にクールです。

関連する問題