我是 Android 游戏开发的新手,在我开始使用 libgdx ShapeRenderer 并进行了更多搜索后,如果我从右脚开始,我会感到困惑。
所以,我真正想知道的是何时应该使用 ShapeRenderer、Mesh + SpriteBatch、Box2D 和 Scene2D。
LibGDX 有很多(大部分是正交的)用于渲染的 API。我仍在学习其中的许多方法,但我可以概述不同的部分。
ShapeRenderer
让您快速轻松地在屏幕上放置基本的纯色多边形和线条。它不是特别有效(它在每次渲染时上传大量顶点数据)。但它可以很快开始。它强烈地面向屏幕(它默认为全屏上的正交项目,其单位通常是像素)。
该类Mesh
使您可以更直接地控制几何图形,但您会接触到更多细节(例如将颜色编码为浮点数并将顶点数据、颜色数据和纹理数据都存储在同一个浮点数组中,以及索引数组)。
SpriteBatch
围绕“精灵”(通常是其中带有纹理的矩形区域)定向。这隐藏了网格纹理的一些复杂性(和灵活性)。
Box2D 用于物理建模,与您提到的任何其他 API 部分不同(主要与渲染有关)。
最后,Scene2D主要是关于创建动画用户界面元素,如按钮、列表和滑块。但它足够强大(并且对动画和交互事件有足够简洁和灵活的支持),您也可以在其中实现相当多的“游戏”。
您也可以使用原始的“OpenGL”命令(请参阅 参考资料GL20
)。
您可以完全混合和匹配这些不同的原语(一个警告是,在开始不同的风格之前,您通常必须“刷新”和“结束”任何//渲染)ShapeRenderer
。因此,例如,您可以将 Scene2D 用于您的“主菜单”和游戏中的一些元操作,a来渲染游戏的核心,并使用 a来生成调试覆盖(考虑可视化边界框等)。SpriteBatch
Mesh
SpriteBatch
ShapeRenderer
另请注意,大多数 libGDX 都面向 2D。RawOpenGL
和Mesh
API 也可用于构建 3D 对象。
查看gdx-invaders 示例,了解它如何使用.OpenGLMesh
和SpriteBatch
. (我认为这个例子早于 Scene2d,所以没有那个......)。查看这些类的实现以了解它们在幕后所做的工作也是值得的。