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);
}
これを事前に行い、回転したスプライトを 'List'に保存します。 –
サブイメージで実行するのではなく、 "メイン"グラフィックスで直接変換を実行できますか? – MadProgrammer
6 kHzを超えるものは何が必要ですか? – trashgod