Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将图像移动到我希望的位置(并不断更新)?_Java_Graphics2d - Fatal编程技术网

Java 无法将图像移动到我希望的位置(并不断更新)?

Java 无法将图像移动到我希望的位置(并不断更新)?,java,graphics2d,Java,Graphics2d,我基本上是编程一个简单的游戏引擎,但我有问题,我的精灵/图像没有出现时,他们应该。。。或者根本没有 我会尽量让这件事尽可能简单。我有一个精灵,游戏引擎和显示类。在gameloop中,我有一个方法设置我的精灵的新位置(因此它只设置x和y变量)。接下来,我调用一个transform方法,该方法执行以下操作: public void transform() { affineTransform.setToIdentity(); affineTransform.translate(x, y

我基本上是编程一个简单的游戏引擎,但我有问题,我的精灵/图像没有出现时,他们应该。。。或者根本没有

我会尽量让这件事尽可能简单。我有一个精灵,游戏引擎和显示类。在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)。作为记录,我在类中确实有一个Graphics2D变量,该变量是通过调用backbuffer.createGraphics()创建的

另一件让我困惑的事情是这个仿射变换。。。我已经阅读了文档,但对于如何使用它以及何时使用它,以及它到底起到了什么作用,我仍然非常困惑。有没有相对简单的解释

当然,这应该是有效的。。。我是不是错过了什么

  • 回答部分问题:

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

    本质上,使用
    Graphics2D
    可以比使用
    Graphics
    做更多的事情。使用Sun JVM 1.5+

  • 我注意到了这一点:我在类中确实有一个Graphics2D变量,它是通过调用backbuffer.createGraphics()创建的

    你应该确保你不是在
    Graphics[2D]
    画布上画画(我用这个词来指的是
    Graphics[2D]
    对象提供的可画区域),你以后会把它扔掉。如果要在单独的画布上绘制图像,则应确保随后将该图像绘制到实际的显示画布上

  • 我对仿射翻译没有很好的解释,但也许这些会有帮助

    • 一般来说,仿射变换由线性变换(旋转、缩放或剪切)和平移(或“平移”)组成。几个线性变换可以组合成一个线性变换。基本上,您可以使用这个类来执行诸如旋转、平移、缩放等操作


  • 考虑创建和发布(请点击链接),一个小的可编译的、可运行的程序,演示了解决这个问题的最佳尝试。然后,我们可以检查您的代码,运行它,修改它,最好能够帮助您修复它。