2

我基本上是在编写一个简单的游戏引擎,但我的精灵/图像没有出现在它们应该出现的时候......或者根本没有出现时遇到了问题!

我会尽量保持这个简单。我有一个 Sprite、GameEngine 和 Display 类。在游戏循环中,我有一个方法可以设置我的 Sprite 的新位置(所以它只设置 x 和 y 变量)。接下来我调用一个转换方法,它执行以下操作:

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);
}

但是什么都没有出现,除了黑屏!

我也对 Graphics g 和 Graphics2D 以及何时使用其中任何一个感到困惑。(覆盖的绘制方法使用图形 g)。作为记录,我在通过调用 backbuffer.createGraphics(); 创建的类中有一个 Graphics2D 变量;

让我感到困惑的另一件事是这个 AffineTransform ......我已经阅读了文档,但我仍然对如何以及何时使用它以及它似乎做什么感到完全困惑。有没有相对简单的解释?

当然这应该工作......我在这里错过了什么吗?

4

1 回答 1

2
  1. 要回答您的部分问题:

    来自 Graphics2D JavaDoc 这个 Graphics2D 类扩展了 Graphics 类以提供对几何、坐标转换、颜色管理和文本布局的更复杂的控制。这是在 Java(tm) 平台上呈现二维形状、文本和图像的基础类。

    从本质上讲,与Graphics2D您一起可以做的比使用Graphics. 并且使用 Sun JVM 1.5+,将您进入的对象投射其中应该是安全的Graphicspaint()Graphics2D

  2. 我刚刚注意到这一点:作为记录,我在类中有一个 Graphics2D 变量,它是通过调用 backbuffer.createGraphics(); 创建的;

    您应该确保您没有在稍后丢弃的Graphics[2D] 画布上进行绘制(我将使用该术语来指代对象提供的可绘制区域)。Graphics[2D]如果您在单独的画布上绘制图像,则应确保随后将该图像绘制到实际的显示画布上。

  3. 我真的没有很好的解释,AffineTransform但也许这些会有所帮助?

于 2011-03-06T16:11:48.777 回答