几天前,我想出了如何在 LibGdx 中进行一些滚动。现在我正在尝试做一些相关的事情。我想重复背景。我的滚动跟随一艘船(是一个 s[ace 船游戏)。在背景中有一张作为纹理加载的空间照片。当船到达背景的尽头时,它继续前进,没有背景了。我已经阅读了有关 wrap 的内容,但我并不真正了解它是如何工作的。我这样做了:
px=new Pixmap(Gdx.files.internal("fondo.jpg"));
background=new Texture(px);
background.setWrap(TextureWrap.Repeat, TextureWrap.Repeat);
然后,在我的渲染方法中
spriteBatch.begin();
spriteBatch.draw(background,0,0,500,50);
drawShip();
spriteBatch.end();
当然它不起作用,它只绘制一次背景。我不知道如何使这种包装方法起作用。有什么帮助吗?
解决方案
我想到了。这不是一个很好的代码,但它可以工作。
首先我声明两个具有相同图像的纹理
bck1=new Texture(Gdx.files.internal("fondo.jpg"));
bck2=new Texture(Gdx.files.internal("fondo.jpg"));
我还声明了两个这样的变量来指定每个 bck 位置的 X 值
int posXBck1=0,posXBck2=0;
然后我在 Render() 中使用它
public void calculoPosicionFondos(){
posXBck2=posXBck1+ANCHODEFONDO;
if(cam.position.x>=posXBck2+cam.viewportWidth/2){
posXBck1=posXBck2;
}
}
在哪里:
ANCHODEFONDO 是我背景的宽度
Cam 是一个 OtrhoCam。
所以我说如果凸轮在 bck2 中(这意味着你再也看不到 bck1)它会改变位置,给出 bck2 的 bck1 位置,并在下一个渲染循环中重新计算 bck2
然后只需在渲染模式下绘制两个 bck 即可。