所以,我真正想知道的是何时应该使用ShapeRenderer、Mesh+SpriteBatch、Box2D和Scene2D。
ShapeRenderer
可以方便快捷地在屏幕上放置基本的平面多边形和线条,但不是特别高效(每次渲染都会上传大量顶点数据)。它主要面向屏幕(默认情况下采用全屏正交投影,单位通常为像素)。
Mesh
类使您能够更直接地控制几何图形,但需要了解更多的细节(例如将颜色编码为浮点数并将顶点数据、颜色数据和纹理数据存储在同一个浮点数组中,以及索引数组的概念)。
SpriteBatch
以"精灵"(通常是带有纹理的矩形区域)为中心。这可以隐藏一些使用网格进行纹理贴图的复杂性和灵活性。
Box2D 用于物理建模,并且与您提到的其他 API 部分(主要是有关渲染的部分)不同。
最后,Scene2D 主要用于创建动画用户界面元素,例如按钮、列表和滑块。但它非常强大(并具有足够的灵活性和良好的交互支持),因此您也可以在其中实现相当多的"游戏"逻辑。
你也可以使用原始的"OpenGL"命令(参见GL20
)。
你可以完全混合和匹配这些不同的基元(一个警告是在开始不同的渲染器ShapeRenderer
/SpriteBatch
/Mesh
之前,通常必须"flush"和"end")。所以,例如,你可以在游戏的“主菜单”和一些元操作中使用Scene2D,SpriteBatch
来渲染游戏的核心,并使用ShapeRenderer
生成调试覆盖物(考虑可视化边框框等)。
还要注意,大多数libGDX面向2D。原始的OpenGL
和Mesh
API也可用于构建3D对象。
查看gdx-invaders example以了解它如何使用Mesh
,OpenGL和SpriteBatch
。(我认为这个例子是先于Scene2d的,所以没有那个...)。此外,值得看一下这些类的实现,以了解它们在内部做些什么。