水平平铺背景
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为正时。
- bg为正常背景
- bgInv 是反转的背景
问题是,当我移动并且 xOffset
从 WIDTH
变为 0 时,似乎有一个“环绕”。
控制台正在输出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);
我正在为一个游戏编写代码,希望背景能够自我重复。
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 时,似乎有一个“环绕”。
控制台正在输出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);