加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – LibGdx如何重复背景?

发布时间:2020-12-15 02:06:20 所属栏目:Java 来源:网络整理
导读:几天前我想出了如何在LibGdx中进行一些滚动.现在我正在试图做一些相关的事情.我想重复背景.我的滚动跟随一艘船(是一个s [王牌船游戏].在背景中有一张空间照片作为纹理加载.当船到达backgorund的末端时,它继续前进并且不再有背景.我读过关于包装的内容,但我并
几天前我想出了如何在LibGdx中进行一些滚动.现在我正在试图做一些相关的事情.我想重复背景.我的滚动跟随一艘船(是一个s [王牌船游戏].在背景中有一张空间照片作为纹理加载.当船到达backgorund的末端时,它继续前进并且不再有背景.我读过关于包装的内容,但我并不真正理解它是如何工作的.我这样做了:

px=new Pixmap(Gdx.files.internal("fondo.jpg"));
    background=new Texture(px);
    background.setWrap(TextureWrap.Repeat,TextureWrap.Repeat);

然后,在我的渲染方法中

spriteBatch.begin();
    spriteBatch.draw(background,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 de bck2的位置,并在下一个渲染循环中重新计算bck2

然后在渲染模式下绘制两个bck.

解决方法

就像Teitus说的那样,不要多次加载纹理!无论如何,你在包装纸的正确轨道上:

texture.setWrap(TextureWrap.Repeat,TextureWrap.Repeat);

现在您可以将draw方法与源位置一起使用.源位置是您选择在纹理上绘制的区域.

batch.draw(texture,x,y,srcX,srcY,srcWidth,srcHeight)

要从右向左滚动纹理,您所要做的就是逐步增加srcX.因此,创建一个在update / render方法中递增的int.

int sourceX = 0;

//render() method

//Increment the variable where to draw from on the image.
sourceX += 10;

//Simply draw it using that variable in the srcX.    
batch.draw(YourTexture,sourceX,screenWidth,screenHeight);

因为你正在包装纹理,它将包装/循环并无限滚动.如果游戏运行了很长时间,那么sourceX int可能会出现问题,因为int只能容纳2147483647.这需要一段时间但你可以通过在每次数字超过总图像宽度时减去图像宽度来修复它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读