【问题标题】:Libgdx give each texture image properties?Libgdx 给每个纹理图像属性?
【发布时间】:2018-01-27 05:53:46
【问题描述】:

从今天开始,我像这样加载我的纹理:

Texture texture = new Texture(path);
Sprite sprite = new Sprite(texture);
batch.draw(sprite.getTexture(), x,y);

就这么简单。

但是现在我有一个小问题,我有很多实体类型,每个都有不同的大小,但是,我有一个等距图,我需要将每个精灵放在图块上(并非所有精灵都更大比瓦片,所以它不是超过 4 个瓦片之类的东西,它们只是比瓦片大一点,需要一些偏移)。

所以基本上我需要一个打包系统,它可以打包一个精灵图像(或一组相同大小的图像)和一个包含在里面的属性,它将有offsetXoffsetY 所以我可以像这样使用它那:

batch.draw(sprite.getTexture(), x + offsetX, y + offsetY);

LibGDX里面有这种东西吗?

我已经尝试过这样做:

    int x = (i * GameTile.TILE_WIDTH / 2) - (j * GameTile.TILE_WIDTH / 2) - (texture.getWidth() / 2);
    int y = (i * GameTile.TILE_HEIGHT / 2) + (j * GameTile.TILE_HEIGHT / 2) - (texture.getHeight() / 2);

ij 是数组中的平铺位置。

【问题讨论】:

  • 为什么不直接获取纹理的大小并计算偏移量呢?我的意思是,你知道瓷砖有多大......不需要成组包装或其他什么。
  • 你会怎么做?每个精灵在图像中的位置不同,我的意思是如何让它在图块上看起来完美?
  • 哦等等,我想我误解了。你有一个包含所有精灵的纹理?我想你不应该在一个纹理文件中混合不同的精灵大小
  • @HerrDerb 即使它的1个纹理,我的瓦片是等距的,瓦片的宽度和高度不相等。在我的例子中,它的 GameTile.TILE_WIDTH 和 GameTile.TILE_HEIGHT。我已经这样做以获得 X/Y 的绘制位置,请参阅我的编辑

标签: java libgdx


【解决方案1】:

这就是我所做的。选择一个至少和你最大的精灵一样大的图像大小。将所有精灵源图像设为此大小,并根据需要在它们周围放置尽可能多的不可见填充,以使它们在此矩形中居中。使用 LibGDX TexturePacker 的 stripWhitespace 功能。并保持 allowRotation 关闭。地图集不会比以前大,但现在它有您可以使用的偏移数据。

在运行时,获取对 AtlasRegions 的引用,而不是隐式转换为 TextureRegions。 AtlasRegion 具有您需要的偏移参数。从中减去源图像大小的宽度和高度的一半,然后添加到要绘制它的中心点。

【讨论】:

  • libgdx 是否有工具可以裁剪大图像的特定宽度/高度?就像我在一个 png 图像中有一个图块集,一个接一个
  • 我不明白你的问题。它确实有 TextureUnpacker 可以将图集拆分为图像的单独文件,但我认为这只适用于具有打包文件的实际图集。还有一个名为 Shoebox online 的免费应用程序,它可以在没有包文件的情况下拆分图集。除此之外,LibGDX 包文件格式很容易理解,因此您可以很容易地为其编写解析器,以添加偏移数据作为后期处理。
猜你喜欢
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多