我正在重构我在libgdx中开发的小RPG。
我有一个普遍的问题,如何正确使用纹理图集。我有100个精灵和大约10种精灵。目前我不使用地图册,但我想增加渲染性能,因为如果我的游戏循环,这是唯一需要花费很长时间的东西。(得到大约100个绑定和15个渲染调用..)
所以它看了TextureAtlas
班link to git,并想知道如何从中获得更多的表现。如果我用正确的纹理得到它的精灵,我会得到一个副本,所以我仍然会切换OpenGL绑定吗?所以这不是一个更好的解决方案,如果我有100个演员都拥有它自己的精灵,或者我错了它,我只是没有做到这一点?
Atlas本身确实建议不要多次调用getsprite
,但我需要这样做,这样每个演员都拥有自己的精灵。
也许你可以给我一个例子,说明如何在不切换OpenGL绑定的情况下使用来自一个地图集的多个精灵。这应该是使用地图册的原因,但我现在还没有得到它。
答案 0 :(得分:5)
如果我使用正确的纹理获得它的精灵,我会得到一个副本,所以我仍然会切换OpenGL绑定吗?
不,你得到它的TextureRegion。 (Sprite是一种更专业的TextureRegion)。
所以当你绘制所有精灵时,如果它们来自同一个TextureAtlas,它们只需要一次绘制。
我该如何实现呢?获得具有相同纹理区域的多个精灵 渲染时没有新绑定的图集?
只需使用TextureAtlas#createSprite:
sprite = textureatlas.createSprite("example");
当你绘制它们时,例如:
batch.begin();
sprite.draw(batch)
sprite2.draw(batch);
sprite3.draw(batch);
batch.end();
如果3个精灵来自同一个TextureAtlas,它们只会冲洗批次一次。
修改强>
TextureRegion只是引用纹理(Atlas)的坐标和大小(矩形)。别担心,纹理没有被复制。它唯一的一个,无论你创造了多少精灵:)
答案 1 :(得分:0)
您可以更改对象顶点上的纹理坐标,以移动它们指向纹理图集的位置。通过正确设置对象,您可以在许多对象之间共享一个大纹理,而不是许多小对象和大量小纹理。
当事物发生变化时,无需将纹理重新发送到图形卡等,只需将对象的纹理坐标移动到指向您希望它们指向的地图集的新部分。