java - 水平平铺背景

标签 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 是反转的背景

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

Click here to see

控制台正在输出xOffset

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

提前致谢

最佳答案

如果我理解正确的话,您想要重复的是 2 * WIDTH by 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);

关于java - 水平平铺背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40568914/

相关文章:

java - 在 jpanel 中绘制图形 (g)

Java 如何在图像下方添加字符串并调整其大小?

c# - 如何确保只绘制视口(viewport)中可见的 Sprite

java - 基于闭包比较两个无序列表的对象

java - Play Framework : load javascript only on specific method calls

java - 为什么 java.awt.Graphics.drawLine 异常慢?

java - 有没有办法知道访问字节码时使用 `new` 创建了哪些类?

java - 将嵌套对象编码为 "flat"XML 结构

javascript - 循环 Sprite 滚动背景