水平平铺背景

Horizontal tiling background

我正在为一个游戏编写代码,希望背景能够自我重复。

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为正时。

问题是,当我移动并且 xOffsetWIDTH 变为 0 时,似乎有一个“环绕”。

Click here to see

控制台正在输出xOffset

我知道这是因为我使用取模得到 xOffset 但我没有找到更好的方法...

提前致谢

如果我没理解错的话,你想要重复的是 2 * WIDTH × HEIGHT 图像,其中左半部分是背景图像,右半部分是水平反转的同一图像。

所以你可以做的是:

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