如何创建逼真的2D角色扮演游戏碰撞检测?


9

我一直想创建一个老式的2D角色扮演游戏,例如《星际海洋》,《最终幻想》,《魔力之剑》,甚至“故事集”系列,我想很多人都会这么做。但是,甚至在只编写一行代码之前,我就进行了大量研究,绘图和试用。

我已经找到了问题的几乎所有答案,但是有一个我无法解决的问题:如何像我之前命名的游戏中那样创建逼真的但简单的碰撞检测

我已经知道几种计算碰撞检测的方法,请看以下示例:

碰撞检测示例

这些都不满足我的需求。

  • 基于图块的碰撞太简单了,更适合Zelda而不是Star Ocean。另外,每个图块的图形都需要填充所有空间才能看起来逼真。
  • 完美像素有太多限制。如果您的图块到处都有像素,则玩家很可能会卡在茫茫荒野中(即:在某些游戏中,您会卡在宽度为2像素的树根上)。
  • 而且二进制掩码会占用过多的内存和imo设置。

我已经阅读了很多文档,但从未发现对我而言看起来不错的东西。而且我所有的试玩看起来都不像我以前玩过的那样。因此,如果您有任何有关2D RPG的工作原理的良好链接或教程,请告诉我。


2
您正在开发什么环境来使防毒面具占用太多内存?对于大多数现代系统而言,这并不是真正的问题,防撞口罩的确听起来确实像您想要的那样。
Gregory Avery-Weir

我大部分时间都在使用XNA在PC上进行开发,但是最近我一直在考虑启动WP7上的项目。我使用碰撞防护罩时遇到的问题是,使用较小的分辨率,其行为就像完全像像素一样,例如,使我的角色陷在角落。因此,除非您使用贝塞尔曲线进行平滑移动,否则在创建蒙版时需要非常小心。
Aymeric

Answers:


9

N篇教程可能对您有所帮助。诚然,它们适用于街机风格的平台游戏,但对于自顶向下的RPG也同样适用。只是不要施加重力。前提是测试一系列基本形状(圆形,与轴对齐的边界框,直线,点等)中的碰撞。

然后,您可以通过某种方式(也许通过自定义关卡编辑器)来装饰您的世界,或者自动生成它们(适合最接近的框或圆)或两者(默认为自动生成的框/圆,并允许设计人员进行调整) 。

在我工作的地方,我们做了很多平台游戏和一些自上而下的探索游戏。自GBA以来,我们就一直在这样做。我们最经常使用AABB来处理字符和对象,可以在Sprite编辑器中对其进行调整-而且我们在这里很疯狂,每个Sprite允许放置大量的盒子,有些盒子的用途不同。我们可能有:

  • 一个或多个碰撞盒,描述撞入物体的物体的形状;
  • 可能只有在攻击过程中才出现的“攻击箱”(并与子画面动画),取决于每种武器甚至可能是两个或三个。
  • 一些“脆弱的盒子”在被其他人的攻击盒子击中时会受到损害-默认情况下,我们使用碰撞盒子,但是当脆弱的盒子小于碰撞盒子时,它们会感觉更好,我们可以允许通过这种方式识别位置损坏
  • AI上的一个或多个“激活框”,描述了AI的感知区域-例如,如果玩家在该区域内,它们就会发起攻击。

级别主要是线段的字符串;我们每个段都有一些元数据来描述损坏或光滑的表面等。

因此,大多数碰撞检测和响应变为AABB-vs-AABB或AABB-vs-segment。有时我们会以抛物线相对于抛物线投掷东西,尽管AABB通常也会在这里投掷。

您不需要很多基本形状就能使外观看起来良好并表现良好-只要您可以调整和迭代它们,就不需要做些基本的事情。


另外,不要对将系统混合在一起感到不好;基于图块的碰撞在某些区域(代表您的世界大部分地区)可能非常出色,但对于对象与对象之间的交互来说是可怕的。没关系; 为object-vs-object使用不同的系统!编写两个系统之间的交互可能比您想象的要容易。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.