2013-02-20 79 views

回答

25

LibGDX有相当多的(主要是正交的)用于渲染的API。我仍然在学习其中的许多方法,但我可以概述不同的部分。

ShapeRenderer可让您快速轻松地在屏幕上放置基本的平色多边形和线条。它不是特别有效(它在每个渲染上传很多顶点数据)。但它可以非常快地开始。它强烈地面向屏幕(默认为全屏幕上的正交项目,其单位通常是像素)。

Mesh类可以让你更直接地控制几何,但是你接触到更多的细节(比如将颜色编码为浮点数并将顶点数据,颜色数据和纹理数据存储在同一个浮点数组中,索引数组的概念)。

SpriteBatch围绕“精灵”(通常为矩形区域,其中有纹理)定向。这隐藏了网格纹理的一些复杂性(和灵活性)。

Box2D是用于物理建模,并不像你提到的任何其他API部分(主要是关于渲染)。

最后,Scene2D主要是关于创建动画用户界面元素,如按钮,列表和滑块。但它的功能足够强大(并且对动画和交互事件有足够灵活的支持),您可以在其中实现相当多的“游戏”。

您也可以使用原始的“OpenGL”命令(请参阅GL20)。

你完全可以混合和匹配这些不同的原语(一个需要注意的是,你通常必须“刷新”和“结束”无论ShapeRenderer/SpriteBatch/Mesh启动不同的前味渲染)。因此,例如,您可以使用Scene2D作为您的“主菜单”和游戏中的某些元操作,使用SpriteBatch来渲染游戏的核心,并使用ShapeRenderer生成调试叠加(想象可视化边界框等)。

另请注意,大部分libGDX都面向2D。原始OpenGLMesh API也可用于构建3D对象。

检查gdx-invaders example以了解它如何使用Mesh,OpenGL和SpriteBatch。 (我认为这个例子在Scene2d之前,所以没有那个......)。它也值得查看这些类的实现,看看他们在底层做了些什么。

+0

嗯,谢谢。现在我看到了差异=)。只是最后一个问题:碰撞检测有什么更好? Box2D,Intersector或其他任何我不知道的东西? – 2013-02-21 09:40:13

+1

'Intersector'具有您自己进行碰撞检测所需的所有工具。 Box2D会做碰撞检测,但它是一个完整的2D物理模拟,所以它做了很多。如果你只是与敌人(或地板球员)相交子弹,你可能会更好地摆脱自己的。 – 2013-02-21 16:18:38

+0

@ P.T。当你必须连续检查N个子弹和M个敌人之间的碰撞时,滚动自己可能并不那么容易,当这些数字不是很小时......并且适当地阻止玩家与地板和墙壁的移动也不是那么容易做到的。 – 2014-03-10 21:16:37