当前位置: 首页 > 知识库问答 >
问题:

在 libGDX 中作为动画运行时,不同大小的纹理区域会反弹

霍修筠
2023-03-14

我有一个使用纹理打包器应用程序创建的纹理表,它删除了所有不必要的透明像素,以节省最终纹理表中的空间。问题是我的动画是一个拿着剑的人,所以当他攻击时,他会把剑举过头顶,这意味着它会改变精灵的宽度和高度。例子…

characterAttack1 = new TextureRegion(texture, 863, 979, 152, 149);
//more animation frames...
characterAttack8 = new TextureRegion(texture, 1, 2, 340, 256);

如您所见,第一帧是152x149,但到第八帧时,它现在是340x256。因此,当我在我的角色类中使用正常的 getWidth() getHeight() 方法时,动画运行时,角色会随着攻击而缩小,因为攻击的高度和宽度会随着剑的挥舞而变大。另一方面,如果我使用该方法...

((TextureRegion)AssetLoader.characterAttack.getKeyFrame(runTime)).getRegionWidth();
and 
((TextureRegion)AssetLoader.characterAttack.getKeyFrame(runTime)).getRegionHeight();

当攻击动画运行时,角色将在屏幕上反弹。我知道我不是唯一一个遇到过这样的事情的人,但我似乎找不到任何关于这方面的信息。我唯一的做法是重新打包纹理文件并使每个纹理文件具有相同的宽度和高度,即使最终打包的纹理中会有大量的透明像素?

如果您需要查看AssetLoader和batcher.draw方法或任何其他方法,我非常乐意提供代码示例,我只是想避免帖子太大。谢谢你。

共有1个答案

柯振濂
2023-03-14

除非你想让你的游戏运行在极低的内存上,否则真的没有必要把纹理打包得这么紧。当你想到事物的宏大规模时,雪碧床单真的很小。我想你的游戏在运行时需要大约100MB的内存,考虑到现在大多数电脑都有4GB以上的内存,再多几MB又能怎么样呢?

你的角色的子画面应该是任何一个画面的最大尺寸。例如,如果最大的帧是340x256,那么每个帧都需要是这个大小。

现在,角色将在每一帧的相同位置,因为渲染位置不会改变。

如果角色的中心始终位于子画面的中间,则可以从图像的中心进行渲染,这将解决您的问题。

 类似资料:
  • 我加载纹理并将它们转换为精灵。下图显示了典型的子画面。形状因子画面而异。当用户只触摸表面积时,我不会移动这些精灵。目前,我正在使用矩形边界来检测用户是否触摸了它。此方法不干净,因为纹理不是矩形。因此,用户可以拖动它而无需精确触摸它。问题是如何创建触摸区域来表示纹理区域(即非透明像素区域或排除下图中的灰色区域)。

  • 如果我创建一个.png 1024 x 1024的纹理,并在中间画一个124 x 124的圆,它的周围将是空的,它使用的RAM是否与我在124x124空间上画一个124 x 124的圆相同?

  • 再详细一点。我不使用Block2D。瓦片大小由8x8缩放为20x20。使用没有填充的texturepacker(无论如何填充都会出现问题)。我不知道该发布哪段代码,因为我不知道问题可能出在哪里,所以这里只是简单的块类。如果有任何帮助,我将不胜感激,谢谢。

  • 我想在我的小libgdx游戏中使用框架缓冲区。 游戏使用了,我修改了s摄像头,使其使用50宽31高的视口。然后我将的投影矩阵设置为。这样做,我有一个分辨率独立的游戏,我可以使用我自己的“世界单位”,而不是使用像素。 但是现在,如果我创建一个,我必须给它一个大小。我必须给它摄像机视口的大小还是屏幕的大小(以像素为单位)? 而且,当我渲染的东西,我可以渲染他们在,这意味着渲染在几乎在游戏窗口的中间?

  • 问题内容: 我需要调整动画GIF文件的大小而不破坏动画。 如何使用PHP做到这一点? 问题答案: 如果您具有imagemagick访问权限,则可以执行以下操作: 如果您没有system()访问权限,则最有可能使用imagemagick插件 注意:这可能会产生较大的文件大小,但图像尺寸较小,这是由于合并会导致图像的最佳性能下降。 这肯定比ImageMagick路线要密集得多,但从技术上讲应该是可以的

  • 我试图旋转纹理时,我画他们。我认为这样做比在Paint.NET中旋转图像90度并将它们保存在不同的文件中更有意义。我查看了api文档中spritebatch绘图参数,但我就是不明白。有一堆参数,比如srcX、srcY、originX等等。我也想知道如何做同样的纹理区域。以下是api文档页面的链接:http://libgdx.badlogicgames.com/nightlies/docs/api/