【问题标题】:Techniques for generating a 2D game world生成 2D 游戏世界的技术
【发布时间】:2010-02-26 09:51:08
【问题描述】:

我想使用 Irrlicht 引擎在 C++ 中制作 2D 游戏。在这个游戏中,你将在某种洞穴中控制一艘小船。这个洞穴会自动创建(游戏会有随机关卡),看起来像这样:

假设我已经有了洞穴内部多边形的点(白色部分)。我应该如何在屏幕上渲染这个形状并将其用于碰撞检测?根据我在不同地点阅读的内容,我应该使用三角测量算法使用洞穴内部的多边形(白色部分)制作洞穴墙壁(黑色部分)的网格。然后,我还可以使用这些网格进行碰撞检测。这真的是最好的方法吗?你知道 Irrlicht 是否有一些内置函数可以帮助我实现这一目标?

我们将不胜感激。

【问题讨论】:

    标签: c++ 3d 2d irrlicht


    【解决方案1】:

    描述如何使用给定的 3D 引擎渲染任意多边形形状是一个相当漫长的过程。可以说几乎所有 3D 渲染都是根据三角形完成的,如果您没有使用工具来生成已经由三角形组成的模型,那么您需要从那里的任何数据生成三角形。对黑色空间或白色空间进行三角测量可能是最好的方法,是的。然后你可以从中建立一个网格或顶点列表,并以这种方式渲染这些三角形。然后列表中的三角形也会加倍以进行碰撞检测。

    我怀疑 Irrlicht 是否有任何三角测量方法,因为它完全针对您的游戏设计,而不是大多数人会采用的通用方法。 (通常他们会有一个工具,可以并排生成游戏几何图形和导航几何图形。)考虑到您那里的形状,这看起来可能非常棘手。

    【讨论】:

    【解决方案2】:

    一种选择是直接使用地图(图像掩码)来测试碰撞。

    例如,

    if map_points[sprite.x sprite.y] is black then
       collision detected
    

    假设您的对象是图像而不是真正的多边形。

    如果您使用真实的多边形,您可以为每个对象形状创建一个“点样本”,
    并检查样本是否有碰撞。

    【讨论】:

      【解决方案3】:

      要检查一个点是在多边形内部还是外部,您可以简单地计算交叉点。你知道 (0,0) 在你的多边形之外。现在从那里画一条线到你的测试点(X,Y)。如果这条线穿过奇数个多边形边(例如 1 条),则它在多边形内。如果直线穿过偶数条边(例如 0 或 2),则点 (X,Y) 位于多边形之外。在纸上运行一次这个算法来说服自己很有用。

      【讨论】:

        猜你喜欢
        • 2014-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多