几天前,我学会了在LibGdx中进行一些滚动操作。现在,我正在尝试做一些相关的事情。我想重复背景。我的滚动跟随着一艘船(是一款太空游戏)。在背景中加载了一个太空照片作为贴图。当船到达背景的边缘时,它继续行驶,没有背景了。我阅读了有关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"));
我声明了两个变量来指定每个背景的位置的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。
因此,如果cam处于bck2中(这意味着您不能再看到bck1),它将更改位置,将bck1的位置设置为bck2,并在下一个渲染循环中重新计算bck2
然后只需在您的渲染模式中绘制两个bck。