水平的平铺背景

时间:2016-11-12 23:35:00

标签: java graphics2d side-scroller

我正在为一款游戏编码,希望我的背景一遍又一遍地重复

这是我正在使用的代码

xOffset = (int) (camera.getX() % WIDTH);

g.drawImage(bgInv, xOffset - WIDTH, 0, WIDTH, HEIGHT, null);
g.translate(xOffset, 0);
g.drawImage(bg, 0, 0, WIDTH, HEIGHT, null);
g.translate(-xOffset, 0);
g.drawImage(bgInv, xOffset + WIDTH, 0, WIDTH, HEIGHT, null);

第一个drawImage在相机的X为负时绘制图像 当相机的X为正时,第三个。

  • bg是正常背景
  • bgInv是倒置的背景

问题在于,当我移动并且 xOffset从WIDTH变为0 时,它会产生“远程传送”的效果

Click here to see

控制台正在输出xOffset

我知道这是因为我使用modulo来获取xOffset但是我没有想出更好的方法...

提前致谢

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你要重复的是2 * WIDTHHEIGHT图像,其中左半部分是背景图像,右半部分是水平反转的相同图像。

所以你可以做的是:

xOffset = (int) (camera.getX() % (2 * WIDTH));

// draw the background image at x = xOffset - 2 * WIDTH
g.drawImage(bg, xOffset - 2 * WIDTH, 0, WIDTH, HEIGHT, null);
g.drawImage(bgInv, xOffset - WIDTH, 0, WIDTH, HEIGHT, null);

// draw the background image at x = xOffset
g.drawImage(bg, xOffset, 0, WIDTH, HEIGHT, null);
g.drawImage(bgInv, xOffset + WIDTH, 0, WIDTH, HEIGHT, null);