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