java – LibGdx如何重复背景?
几天前我想出了如何在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.这需要一段时间但你可以通过在每次数字超过总图像宽度时减去图像宽度来修复它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 如何调试JBossESB?
- java – 你可以编程访问当前的Heroku dyno id / name?
- 详解SpringBoot文件上传下载和多文件上传(图文)
- java – JPA Criteria Api select列为null的对象
- java – onFling和multitouch – 多个MotionEvent指针
- 如何在Launch4j中使用Bundle JRE选项
- java – localhost上的服务器tomcat v8.0服务器无法启动
- JSP Request.getProtocol()方法:获取客户端向服务器传送的
- servlet上传文件实现代码详解(四)
- java – 打开另一个窗口时将JFrame变为黑色