【问题标题】:XNA C# 2D Platformer GameXNA C# 2D 平台游戏
【发布时间】:2010-02-09 09:12:57
【问题描述】:

我正在尝试在 XNA 中制作(弄清楚如何......)一个 2d 平台游戏。

我知道如何创建平铺网格以及如何执行碰撞检测。 我对玩家的 9 个边界图块执行碰撞检测,但我想知道是否有更好的方法来执行碰撞检测。

我读过 Braid 不使用瓷砖,而是使用拼凑的图像或其他东西,你如何对这些进行碰撞检测?这比使用瓷砖更好吗?

【问题讨论】:

    标签: c# xna collision-detection tiles


    【解决方案1】:

    假设您不介意使用第三方工具为您完成大部分工作,您最好使用 Box2D for C# 之类的工具。

    http://www.box2d.org/ http://code.google.com/p/box2dx/

    此库将为您提供碰撞检测和物理功能。

    【讨论】:

    • 使用物理库对平台游戏中的主角进行简单的碰撞检测通常是个坏主意。调整它并使其运动和感觉正确需要付出巨大的努力。像马里奥这样的游戏在物理上并不正确,因此玩起来更有趣。这并不意味着它的行为和遵守某些规则(例如主角因重力而跌倒)只是它被编程为感觉恰到好处,而不是物理上正确。
    • Box2D 和 Farseer Physics,如下所述,是非常简单的物理 API。事实上,它们是如此简单,我认为用它们建立一个基于物理的世界将比滚动你自己的碰撞检测需要更少的代码行。即使是简单的 2d 平台游戏。
    • 物理学的问题(再次)是要花时间才能正确。一切皆有可能,这对某些游戏来说很有趣,但通常你不希望主角能够进行交互和使用所有东西。基于物理的游戏很快就变成了模拟风格的游戏,而 plqtform 游戏则是更直接的街机风格游戏。这并不意味着他们对某些元素使用物理东西,但这绝对不意味着一切都是模拟的。
    • 这是真的,我认识的一个人从 Farseer 中组装了一个平台游戏,不得不对引擎进行相当多的硬塞才能获得合理的行为。它奏效了,但需要很长时间。
    • @reinier 和 RCIX 哪个更好用?物理引擎或瓷砖碰撞?像“新超级马里奥兄弟 Wii”这样的平台游戏现在使用什么?我知道旧的平台游戏使用瓷砖碰撞对吗?
    【解决方案2】:

    如果您想要复古风格,那么使用瓷砖当然没问题!但是,如果您想要更“现代”的东西,那么您可以使用更传统的物理引擎。 Farseer Physics 是一个很棒的引擎,有几个人用它来制作平台游戏。它基于 Box2D 和类似的引擎,但提供了一个更简单的 API 和几个独特的功能(如纹理到几何),我自己可以证明它是很好玩的。

    【讨论】:

      【解决方案3】:

      对于像 Braid 这样的游戏,您可能需要的不仅仅是碰撞检测。我假设您还需要一个物理引擎。我建议你看一下Farseer Physics engine,这是一个与 XNA 配合得很好的 2D 引擎。它支持多种不同的碰撞检测技术。

      【讨论】:

      • 谢谢,我去看看farseer。
      • 我现在一直在研究 farseer,从它的样本来看,它看起来不错,但我无法让 2 个几何对象之间的碰撞检测工作。我创建了一个 PhysicsSimulator,2 个 Bodys,2 个 Geoms,现在 1 个 body 因为重力而下落。问题是它直接穿过另一个身体。
      • @Restart:你看过所有的演示吗?碰撞检测的例子很多。
      【解决方案4】:

      您是否查看过 XNA 创作者俱乐部的碰撞系列中的示例,尤其是 pixel-collision 示例?

      【讨论】:

      • 对于平台游戏,您真的不需要像素完美的碰撞检测。这意味着如果主角动画,有时(例如由于他的手伸出)他撞到墙上,然后他再次动画,他仍然可以走 2 个像素。你通常做的是定义一些碰撞框,或者在角色周围定义一个不可见的椭球形状,并将其用作你的碰撞区域。
      • @reinier:我编写了 2D 平台游戏,其中英雄和瓷砖之间的碰撞不是像素完美的,但物体(如球)和瓷砖之间的碰撞是像素完美的,物体和英雄之间的碰撞是像素完美的也。所以它可能比“没有像素完美碰撞”更复杂。 :)
      • @wizardofodds:这显然是一个选择。如果游戏稍微宽容一点,我自己会更喜欢它。所以如果我的主角的左鼻孔碰巧撞到敌人的指甲,我​​的主角不会瞬间死亡。尽管计算机可以是像素完美的,但玩家的视觉通常不是……这就是为什么通常你允许一些精灵重叠。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      相关资源
      最近更新 更多