【问题标题】:Libgdx batch.draw vs sprite.drawLibgdx batch.draw vs sprite.draw
【发布时间】:2015-11-06 20:04:16
【问题描述】:

我用 TextureAtlas 加载它并调用 TextureAtlas#createSprites("something")。我将得到一组 AtlasSprites。我绘制这些好像没有使用 sprite.draw(Batch batch) 剥离空白一样,但我还必须将纹理的大小减小到世界的大小,所以我使用 setSсale,但是纹理没有缩小到世界的大小。所以我决定尝试通过batch.draw(Sprite sprite,float x,float y,float width,float height),但它像空白被剥离一样绘制。如何绘制纹理,好像空白没有被剥离并减少它?

【问题讨论】:

  • 通过“剥离” - 你的意思是当你不想要空白时它也显示为透明?
  • 在 libgdx TexturePacker 中有选项 stripWhitespaceX,stripWhitespaceY,这就是这个选项的原因:“如果为真,输入图像左右边缘的空白像素将被删除。应用程序必须特别注意绘制这些区域正确。(对于 X)“。因此需要恢复空白以显示正确运行的动画示例

标签: java android libgdx


【解决方案1】:

仅供参考)您之前使用的Spritedraw 方法如下所示:

public void draw (Batch batch) {
    batch.draw(texture, getVertices(), 0, SPRITE_SIZE);
}

SPRITE_SIZE 是顶点数,0 是“偏移量”,不幸的是,没有类似的版本使用缩放,至少我能找到。


解决问题的绝对最佳方法是,假设您有一些精灵确实需要一些透明度,那就是使用固定的alpha 值重新创建纹理。您可以在各种图像编辑器中执行此操作。这样你的纹理第一次就被正确加载了。

另一种方法是在创建Textures 时将Pixmap.Format 设置为RGB888 而不是RGBA8888A 代表 alpha,因此您将纹理的格式更改为没有 alpha 值。 (仅供参考,8 是每个颜色通道使用的位数 - 红色:8 位,绿色:8 位,蓝色:8 位

但是,当使用TextureAtlas 时,我不赞成如何为您的情况设置纹理的输出格式。我知道它考虑了Page 中的Pixmap.Format,但我不确定如何将其应用于您的地图集设置。

还有批量设置

batch.disableBlending();

这实际上会导致批处理在性能方面运行得更快。所以这很好。但是,以这种方式绘制的所有内容都会受到影响。

【讨论】:

  • 我不这么认为。因为我可以使用 sprite.batch 方法。出现的唯一问题是纹理的大小。最初,我尝试过,但是每次绘图时纹理都会 sprite.setsize 变小,所以我必须绘制以恢复原始大小,但我不喜欢这个选项,因为这会影响性能。我想我会使用 sprite.setSсale 调整大小,但纹理保持相同大小。
猜你喜欢
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多