带有BufferedImage的闪烁线

时间:2015-10-02 17:25:06

标签: java image bufferedimage lines

我正在制作一个基本游戏,由于某种原因,当地图,一个INT_RGB类型的BufferedImage沿x轴移动时,图像的外部左右边缘会闪烁。当我沿Y轴移动图像时,这不会反过来发生。即使我将其设置为使用数百个图块绘制相同的图像,它仍然只是沿着图像的外部左右边缘整体闪烁 - 而不是每个单独绘制的图块图像的外边缘。闪烁从顶部开始向下移动,就像越来越多的图像沿x轴移动一样。以下是BufferedImage的设置方法,并进行了一些编辑:

//Graphics
private BufferedImage image;
private Graphics2D g;

image = new BufferedImage(Constants.WIDTH, Constants.HEIGHT, BufferedImage.TYPE_INT_RGB);
g = (Graphics2D)image.getGraphics();

private void draw() {
    gsm.draw(g);
}

private void drawToScreen() {
    Graphics g2 = getGraphics();
    g2.drawImage(image, 0, 0, Constants.WIDTH, Constants.HEIGHT, null); 
    g2.dispose();
}

以60 fps调用draw()和drawToScreen(),gsm是游戏状态管理器。然后在实际的游戏类中处理,如下所示:

public void draw(Graphics2D g) {
    //Draw Background
        g.setColor(Color.black);
        g.fillRect(0, 0, Constants.WIDTH, Constants.HEIGHT);
        g.drawImage(Assets.test, (int)xOffset, (int)yOffset, null);
    }

绘制中的黑色背景,然后是图像。 Assets.test是BufferedImage,xOffset和yOffset根据玩家输入(也就是移动)以一定的偏移量绘制它。我也可以这样绘制:

public void draw(Graphics2D g) {
    //Draw Background
        g.setColor(Color.black);
        g.fillRect(0, 0, Constants.WIDTH, Constants.HEIGHT);
        for(int i = 0; i < yLength; i++) {
            for(int l = 0; l < xLength; l++) {
                g.draw(tileMap[l][i].getImage(), l * Constants.TILESIZE + (int)xOffset, Constants.TILESIZE * i + (int)yOffset, null);
            }
        }
}

这里,tileMap [l] [i]是每个图像,tileMap是一个双层的tile数组,每个都存储一个solidity值和一个图像。 Constants.TILESIZE是每个tile的大小,xOffset和yOffset与之前的大小相同。

然而,以这种方式绘制它与另一种具有相同的效果,只是性能较差。正如我在开始时所说的,线条仍然只在整个图像的外边缘闪烁,而不是每个瓷砖,这让我感到奇怪。我不记得这些线条总是闪烁,但我不能说它们什么时候开始这样做。造成这种情况的原因是什么?如何解决?

如果需要更多代码,或者如果有任何拼写错误或其他问题的答案,请告知我们。我没有看到任何,但这并不意味着它们不存在。

非常感谢!

0 个答案:

没有答案