【发布时间】:2013-02-25 04:02:51
【问题描述】:
我正在尝试旋转导弹炮塔的缓冲图像,使其看起来像是在跟踪目标。基本上,我可以使用 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 游戏究竟是如何绘制旋转图像的?我做得对吗,还是有更好/更节省内存的方法?
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖SSCCE。
-
完成。该类称为 trigTester。 pastebin.com/Di1WbMjr 。你可以忽略所有的数学。那只是为了计算旋转弧度。您需要查看的唯一代码是 render()、tick() 和 constructor()。我不确定我是否把我的问题说清楚了。基本上我想知道是否可以直接对包含tower.png像素信息的像素数组进行旋转,然后将该像素数据复制到主屏幕像素数组上进行绘制,而不是直接将其绘制到屏幕上作为 png。
-
“你可以忽略所有的数学运算。” 我一般会忽略链接。如果代码是 SSCCE,请将其添加为 edit to the question。
-
@GayLord:如果您希望陌生人努力理解您的问题并帮助您,这将非常有帮助,如果您努力使帮助您变得更容易,我们将不胜感激。我同意 Andrew 的建议,即您在此处创建 sscce 作为对您问题的编辑。
标签: java image awt java-2d affinetransform