在纹理中制作孔(清理圆圈)的最快方法

时间:2016-02-22 14:42:24

标签: libgdx

我正在制作一款具有多变图形的游戏。我有大的像素图,我正在制作纹理,我正在屏幕上渲染。这很好用,除了每次我想要改变纹理我实际上都在更新像素图并从中制作纹理而且它非常慢。那些洞是由爆炸造成的,有时我在短时间内发生了20次爆炸,并且滞后很明显。

所以,我在我的像素图中绘制了一个空白圆圈,然后我用更改的像素图制作新纹理并破坏旧纹理。

是否有更快的方式来更改纹理?我没有看到纹理类有一些绘图功能吗?

我能以某种方式直接在纹理中画一个洞(空心圆圈)吗?

3 个答案:

答案 0 :(得分:1)

你申请的所有内容似乎都可以,但我认为你不需要创造新的纹理并摧毁旧纹理。这里有一个关于使用pixmap修改纹理的好教程:

http://blog.gemserk.com/2012/01/04/modifying-textures-using-libgdx-pixmap-in-runtime-explained/

他们实现了一个PixmapHelper类,通过在其上面放置一个洞来修改pixmap,并调用#34; fillCircle"可以根据需要使用Pixmap的方法。

使用Pixmap在构造函数中创建纹理,并且在擦除圆形区域后不使用任何新的Pixmap数据刷新。

答案 1 :(得分:1)

使用FrameBuffer类快速绘制纹理。您可以使用所需的纹理尺寸对其进行实例化。要绘制到它,请调用o.Inner,然后选择Left[Int,Nothing],然后按照通常绘制到屏幕的方式绘制到它,然后调用frameBuffer.begin()。要使用纹理,请使用gl.glClear(/*...*/);

答案 2 :(得分:0)

谢谢你们两位,但我一直在寻找最简单的解决方案(这就是为什么我还是libGDX)。

@Fuat,这是真的,我没有为每个绘图(洞)创建新的纹理,但创建和销毁纹理并不是那么昂贵的操作。最昂贵的是将整个像素图移动到纹理(大面积)。我的解决方案给了我很好的结果,而且非常简单:

  1. 我像以前一样在大像素图上画一个洞(圆圈)。
  2. 我正在创建一个临时的小像素图,大到足以接受爆炸的大小(洞)。
  3. 我将通过孔绘图更改的部分从大像素图复制到小临时图。
  4. 我将小像素图绘制到纹理 - 比绘制原始的大纹理快得多。这是至关重要的。将大像素图复制到纹理甚至不再创建texutre是最费力的操作。小像素图是一个不同的故事。
  5. 处理临时像素图。
  6. 现在它的工作非常流畅!无论如何,谢谢你的想法。 希望,这也会对某人有所帮助。