【问题标题】:When to use ShapeRenderer, Mesh + SpriteBatch, Box2D and Scene2D in Libgdx?何时在 Libgdx 中使用 ShapeRenderer、Mesh + SpriteBatch、Box2D 和 Scene2D?
【发布时间】:2013-02-06 04:02:48
【问题描述】:

我是 Android 游戏开发的新手,在我开始使用 libgdx ShapeRenderer 并进行了更多搜索之后,如果我从右脚开始,我会感到困惑。

所以,我真正想知道的是何时应该使用 ShapeRenderer、Mesh + SpriteBatch、Box2D 和 Scene2D。

【问题讨论】:

    标签: android libgdx box2d scene2d


    【解决方案1】:

    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,所以没有那个......)。查看这些类的实现以了解它们在幕后所做的工作也是值得的。

    【讨论】:

    • 嗯,谢谢。现在我看到了差异=)。最后一个问题:什么对碰撞检测更好? Box2D、Intersector 还是其他我不知道的?
    • Intersector 拥有您自己进行碰撞检测所需的所有工具。 Box2D 会做碰撞检测,但它是一个完整的 2D 物理模拟,所以它做得更多。如果您只是将子弹与敌人(或有地板的玩家)相交,那么您可能会更好地滚动自己。
    • @P.T.当你必须不断检查 N 颗子弹和 M 个敌人之间的碰撞,而这些数字并不小时​​,你自己的滚动可能并不容易……而且正确地用地板和墙壁阻挡玩家的移动也不是那么容易。
    猜你喜欢
    • 2018-04-14
    • 2012-12-22
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多