2

我正在尝试旋转导弹炮塔的缓冲图像,使其看起来像是在跟踪目标。基本上,我可以使用 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);

这行得通,但我想做的是变换(旋转)缓冲图像,然后将新旋转的像素数据复制到像素数组中,然后将其绘制到屏幕上,因为我相信这是大多数游戏绘制旋转图像而不是绘制的方式一个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 回答