XNA C# 2D 平台游戏

7

我正在尝试在XNA中制作2D平台游戏。

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

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

4个回答

3

5
在平台游戏中,为主角使用物理库进行简单的碰撞检测通常不是一个好主意。要使其运动和感觉正确需要付出巨大的努力。像马里奥这样的游戏并非真实物理模拟,因此更加令人愉悦。这并不意味着它看起来不遵循某些规则(例如主角因重力而下落),只是程序员编程时注重让其感觉恰到好处,而不是物理上的正确性。 - Toad
Box2D和Farseer Physics是非常简单的物理API,事实上它们如此简单,我会认为使用它们设置基于物理的世界需要的代码行数比自己编写碰撞检测还少,即使是对于一个简单的2D平台游戏。 - xgalaxy
2
物理学的问题(再次)在于需要很长时间才能做好。虽然对于某些游戏来说任何事情都是可能的,但通常你不希望主角能够与所有物品进行交互和使用。基于物理的游戏很快就会变成模拟风格的游戏,而平台游戏则更直接地呈现街机风格的游戏。这并不意味着它们不会在某些元素中使用物理学,但绝对不意味着一切都是模拟的。 - Toad
没错,我认识一个人用Farseer制作了一个平台游戏,但他不得不花费很长时间来调整引擎以获得合理的行为。虽然最终成功了,但这需要花费很长时间。 - RCIX
@restart:在所有的选项中很容易迷失方向。这就是为什么建议从简单的瓦片地图开始。当你完成第一个游戏时,你将有足够的经验来尝试其他方案。 - Toad
显示剩余4条评论

1

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


1

对于像《Braid》这样的游戏,你可能需要比碰撞检测更多的东西。我认为你还需要一个物理引擎。我建议你看一下Farseer Physics engine,它是一个2D引擎,非常适合与XNA一起使用。它支持许多不同的碰撞检测技术。


我现在一直在研究Farseer,从它的示例中看起来很不错,但是我无法让两个几何体之间的碰撞检测正常工作。我创建了一个PhysicsSimulator、2个Bodys和2个Geoms,现在一个物体因为重力而下落,问题是它直接穿过了另一个物体。 - Restart
@重新开始:你看了所有的演示吗?有很多关于碰撞检测的例子。 - Brian Rasmussen

0

你有没有在XNA创作者俱乐部的碰撞系列示例中检查过像素碰撞示例?


3
对于平台游戏而言,你不需要像素级别的完美碰撞检测。这意味着如果主角动画中的某些部分(例如手)伸出来并撞到了墙壁,然后再次动画,他仍然可以向前走两个像素,这是不合适的。通常的做法是定义几个碰撞框或在角色周围定义一个无形的椭球形状,并将其用作碰撞区域。 - Toad
@reinier:我写过2D平台游戏,其中英雄和瓷砖之间的碰撞不是像素完美的,但是球体等物体与瓷砖之间以及物体与英雄之间的碰撞都是像素完美的。因此,这可能比“没有像素完美的碰撞”更复杂。 :) - SyntaxT3rr0r
1
@wizardofodds:这显然可以是一个选择。我个人更喜欢游戏稍微宽容一些。因此,如果我的主角的左鼻孔碰巧与敌人的指甲撞上,他不会立即死亡。虽然计算机可以像素完美,但玩家的视觉通常不是...这就是为什么通常允许一些精灵重叠的原因。 - Toad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接