2016-11-12 94 views
0

我正在编写游戏,并且希望我的背景重复自己一遍又一遍。水平平铺背景

这是我使用

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是倒

问题的背景是,当我移动和X偏移从宽度变为0,它给出的效果“传送”

Click here to see

的控制台输出X偏移

我知道那是因为我使用模获得X偏移,但我没有想出一个更好的办法...

在此先感谢

+1

负数的模给出负数。尝试'if(xOffset <0)xOffset + = WIDTH;'作为第二行。 – Marco13

+0

@ Marco13 xOffsets永远不会消极,但也试图使用你的声明,也改变它虽然,但不工作仍然 – L3n

+0

也许这篇文章将有助于:http://stackoverflow.com/questions/16138363/infinite-background游戏/ 16138735#16138735 – camickr

回答

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

这正是我需要的感谢! – L3n