自上而下的RPG运动(带校正)?


27

我希望我们都曾经玩过《塞尔达传说:通往过去的链接》,如果我记错了,请纠正我,但我想模仿一下这种2D,自上而下的角色移动。在其他游戏中也可以做到这一点,但是我认为这种引用是最简单的。更具体地说,我所谈论的移动和校正类型是:

  • 浮动运动不仅限于像口袋妖怪和其他游戏之类的基于瓷砖的运动,轻按一下运动板即可在该基本方向上移动一个正方形。这种浮动运动应该能够实现对角线运动。
  • 如果您向西走,并且以东北/西南方式到达对角墙,即使您继续按住控制器的左(西)键,您也将被校正为西南运动。这应适用于在两个方向上校正的两个对角线。
  • 如果您距离直走门或走廊几步之遥,那么您会被校正为穿过大厅或沿着走廊走,即撞到角落会导致您被推入大厅/门。

我一直在寻找有效的方法来实现这一目标,并且没有运气。明确地说,我说的是人物角色的动作,而不是NPC的动作。他们的资源可用于这种运动吗?Wiki或其他内容上解释的方程式或算法?

我正在使用XNA Framework,其中有什么可以帮助您的吗?

Answers:


23

好吧,第一个要点很容易。您只需在世界或像素坐标(而不是基于图块的坐标)中存储和操纵角色的位置即可。如果您对此有疑问,可能是由于您对世界和图块空间的表示方式选择感到困惑,因此也许您应该发布有关它的更多详细信息/提出一个单独的特定问题。

对于第二点,最直接的方法是获取玩家的(标准化的)运动矢量,并将其添加到墙的法线矢量,然后重新进行标准化。所得矢量的分量的符号将指示墙壁与玩家的运动之间的关系,而矢量本身指示玩家现在可以向哪个方向移动。

对于第三点,假设墙和播放器都有碰撞矩形,则应该能够确定播放器的碰撞矩形与墙的碰撞矩形有多少接触。例如,如果玩家向右移动并撞到垂直墙,则比较碰撞矩形的Y轴范围-如果玩家的范围超出墙的范围某个阈值,例如玩家的Y的75%轴范围,然后您将玩家“欺骗”到门口。

在这里,关于对象模型在代码中的外观以及选择的技术,我作了大量假设,这主要是由于问题的普遍性。由于相同的原因,我试图提出简单的方法(尽管可能不是最佳方法)。如果您可以在这个问题中或在新问题中提供更具体的信息,我可以尝试提供更多详细信息或更好的主意。


是的,将角色浮动到周围不是问题。只是确保人们看到了这是必要条件。您确实给了我一个关键的答案:具有向量的图块!我不敢相信我没有想到这一点。谢谢。
Corey Ogburn

在zelda中,它们只能处于一个角度,因此不需要计算法向向量,这只是代码中的一种特殊情况。
BlueRaja-Danny Pflughoeft

我不明白您如何给图块提供矢量。那会是什么样?
测试

一个图块可能已经具有其图形之类的数据,无论它是否可传递,等等。这只是另一个字段。例如:struct Tile {vector2 normal; ...}正常的值应该与定义瓷砖的数据
乔希

@JoshPetrie修改此。可以在多个方向上碰撞的图块是否需要多个矢量?我不确定我是否了解磁贴如何具有单个矢量。
测试

4

第二点的可能答案是使用点积(ab * normalized(b))沿着墙壁矢量投影玩家的移动矢量。然后,您会得到一个向量,该向量告诉您将播放器沿墙壁的方向移动多远,如果您按照该向量移动播放器,您将沿着墙壁移动“滑动”。在上一个游戏项目中对我来说效果很好。


3

对于乔什来说,这是一个很好的答案,但我会提出一些建议:-有关在墙壁上滑动的更多信息,请查看我的问题 -从这个答案中,我设法使其工作得非常好。-如果我没记错的话,在向上浏览屏幕时,“链接”将易于对齐到最接近的整个水平网格正方形。这样,当您到达门口时,您很有可能会正确地排成一行(可能是错误的)。-为使通行门变得容易,请确保角色的碰撞盒比门宽小得多。


还是碰撞盒是一个圆圈?
奥斯卡·杜夫伯恩

2

为了校正进入的门,可以使门的碰撞对象略大于门的图像。这将产生与Josh相同的效果,但不必计算与墙的碰撞矩形的接近度。

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.