java无法将图像移动到我想要的位置(并不断更新)?
我基本上是编程一个简单的游戏引擎,但我有问题,我的精灵/图像没有出现时,他们应该。。。或者根本没有
我会尽量让这件事尽可能简单。我有一个精灵,游戏引擎和显示类。在gameloop中,我有一个方法设置我的精灵的新位置(因此它只设置x和y变量)。接下来,我调用一个transform方法,该方法执行以下操作:
public void transform() {
affineTransform.setToIdentity();
affineTransform.translate(x, y);
}
接下来,我在Sprite中调用一个draw方法:
public void draw() {
graphics2D.drawImage(image, affineTransform, jFrame);
}
最后,在我的线程中,我在JFrame(Display类)上调用repaint()。我对该类的绘制方法如下:
public void paint(Graphics g) {
g.drawImage(backbuffer, insets.left, insets.top, this);
}
但是除了黑屏,什么也没有出现
我还对图形g和图形2D以及何时使用这两种图形感到困惑。(替代的绘制方法使用图形g)。作为记录,我在通过调用backbuffer创建的类中确实有一个Graphics2D变量。createGraphics()
另一件让我困惑的事情是这个仿射变换。。。我已经阅读了文档,但对于如何使用它以及何时使用它,以及它到底起到了什么作用,我仍然非常困惑。有没有相对简单的解释
当然,这应该是有效的。。。我是不是错过了什么
# 1 楼答案
回答部分问题:
From the Graphics2D JavaDoc 这个Graphics2D类扩展了Graphics类,为几何图形、坐标变换、颜色管理和文本布局提供更复杂的控制。这是在Java(tm)平台上渲染二维形状、文本和图像的基本类
基本上,使用} object you get in ^{} to ^{}
Graphics2D
可以比使用Graphics
做得更多。使用Sun JVM 1.5+,it should be safe to cast the ^{我刚刚注意到:作为记录,我在类中确实有一个Graphics2D变量,它是通过调用backbuffer创建的。createGraphics()
你应该确保你不是在
Graphics[2D]
画布上画画(我会用这个词来指Graphics[2D]
对象提供的可画区域),你以后会把它扔掉。如果要在单独的画布上绘制图像,则应确保随后将该图像绘制到实际的显示画布上我对
AffineTransform
没有很好的解释,但也许这些会有帮助https://secure.wikimedia.org/wikipedia/en/wiki/Affine_transformation
一般来说,仿射变换由线性变换(旋转、缩放或剪切)和平移(或“平移”)组成。几个线性变换可以组合成一个线性变换。