我正在制作一个基本游戏,由于某种原因,当地图,一个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与之前的大小相同。
然而,以这种方式绘制它与另一种具有相同的效果,只是性能较差。正如我在开始时所说的,线条仍然只在整个图像的外边缘闪烁,而不是每个瓷砖,这让我感到奇怪。我不记得这些线条总是闪烁,但我不能说它们什么时候开始这样做。造成这种情况的原因是什么?如何解决?
如果需要更多代码,或者如果有任何拼写错误或其他问题的答案,请告知我们。我没有看到任何,但这并不意味着它们不存在。
非常感谢!