在libgdx中,对于图片的缩放和定位感到困惑

3
我很难理解libgdx的实际显示方面。也就是说,需要完成一些工作才能将内容放到屏幕上,这似乎相当混乱。我的困惑可以分为两部分:
1. 在创建图像方面,确切需要做些什么呢?有Texture、TextureRegion、TextureAtlas、Sprite、Batch等几种相关资产。它们之间如何关联和联系?它们之间的"生产链"是什么?
2. 将上述内容放到监视器或显示器中,不同的坐标和尺寸措施如何相互关联和转换?比如说我想把图像X放在屏幕上,它有自己的尺寸和坐标,但是还有一个视口大小(是否有视口位置?)和相机位置(是否有相机大小?)。除此之外,还有从Gdx.graphics获取的整体显示尺寸。下面是一些例子:
- X是我的"全局地图",比屏幕大。我想能够在地图上滚动/平移。显示时应该使用哪些坐标/位置? - Y比我的屏幕大。我想将其缩小并始终位于屏幕/显示器中心。我在这里使用哪个缩放因子以及哪些坐标/位置? - Z比我的屏幕小。我想将其置于屏幕左上角,并将其"固定"在前面提到的全局地图上。我应该使用哪种定位系统?
抱歉,如果这是一堆东西......我想说的第二部分就是在什么坐标/位置、尺寸和缩放比例下完成所有操作?
我知道这可能是一次性要求很多,而且我也知道大多数这些东西都可以在线找到,但是在浏览了一遍又一遍的教程后,似乎无法得到关于它们如何相互关联的直接回答。非常感谢您的帮助!
2个回答

3
  • 纹理实际上是原始图像数据。
  • TextureRegion允许您从较大的纹理中获取较小的区域。例如,将游戏/应用程序中的所有图像打包到单个大型纹理中(LibGDX“TexturePacker”是一个单独的程序,可以执行此操作),然后使用较大纹理的区域来制作您的个人图形是常见做法。这样做是因为切换纹理是一项繁重且缓慢的操作,您希望尽量减少此过程。
  • 当您将图像打包到单个大图像中时,TexturePacker会创建一个“.atlas”文件,其中存储了您各个图像的名称和位置。 TextureAtlas允许您加载.atlas文件,然后提取原始图像以在程序中使用。
  • Sprite为纹理添加了位置和颜色功能。请注意,Texture API没有设置/获取位置或颜色的方法。精灵将成为您可以在屏幕上移动和定位的角色和其他对象。
  • Batch / SpriteBatch是将多个精灵有效地绘制到屏幕上的方法。它不是逐个精灵进行绘制调用,而是同时进行多个绘制调用。

希望我没有增加混乱,但我非常喜欢使用“Actor”和“Stage”类而不是“Sprite”和“SpriteBatch”类的另一个选项。 Actor类类似于Sprite,但通过act方法添加了其他移动/动画功能。 Stage替换了SpriteBatch,因为它使用自己的内部SpriteBatch,因此您不需要显式使用SpriteBatch。

还有一整套UI组件(表格、按钮、文本字段、滑块、进度条等),这些组件都基于Actor并与Stage一起使用。

我无法回答问题2。 我专注于基于UI的应用程序,因此不知道处理大型游戏世界的最佳实践。 但希望在该领域更有经验的人能够帮助您解决问题。


所以一般来说,Actor + Stage 比 Sprite + SpriteBatch 更"强大"?因为Actor可以拥有自己的update方法等?如果我有一个原始的.png文件想要在游戏中使用。整个处理过程会是怎样的呢?Atlas -> Region -> Texture ->Sprite/Actor? - GoldenGateGeek

2
这篇回答太长了,无法作为评论回复,因此我将其作为另一个答案来回复……
我认为Sprite/SpriteBatch和Actor/Stage都同样强大,因为你仍然可以使用Sprite/SpriteBatch进行动画和移动,但是Actor/Stage更易于使用。舞台有两个方法叫做“act”和“draw”,这使得舞台非常容易地更新和绘制它包含的每个演员。你需要为每个演员覆盖act方法来指定你想要它执行的操作。查找一些不同的Stage/Actor教程,附带有示例代码,你就可以清楚地知道如何使用它。
另外,我之前稍微有些不正确,因为“Actor”等同于Sprite,因为Sprite包括纹理,但Actor本身没有任何图形组件。有一个名为“Image”的Actor扩展,它包括一个Drawable,因此Image类实际上是Sprite的等价物。Actor是提供行动(或“更新”)方法的基类,但它不一定是图形的。我还将Actor用于其他目的,例如在特定时间触发音频声音。
Atlas创建包含所有png文件的大纹理,然后允许你从中获取区域以获取单独的png。因此,获取特定png图形的流程是Atlas> Region> Sprite/Image。Image和Sprite类都有可以接受区域的构造函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接