自上而下的RPG运动瓦特/矫正?

我希望我们都玩过“塞尔达传说:一个与过去的联系”,如果我错了,请纠正我,但我想模仿那种2D,自上而下的角色运动,并带有一些修正。 在其他游戏中已经完成了,但是我觉得这个参考将是最容易涉及到的。 更具体地说,我所谈论的那种移动和修正是:

  • 浮动运动不限于像口袋妖怪和其他游戏的瓦片基础的运动,其中一个运动垫的水龙头移动你一个方向的主要方向。 这个浮动运动应该能够实现对角线运动。
  • 如果你正在西部走,而你以东北/西南时尚的方式来到对角线的墙上,那么即使你继续在控制器上左移(West),你也会被纠正成西南方的移动。 这应该适用于两个对角线纠正两个方向。
  • 如果你从正方形走到门或走廊几个像素,你会被纠正走通过大厅或沿着走廊,即碰到角落,导致你被推入大厅/门。

我寻找有效的方法来实现这一点,并没有运气。 要说清楚我是在谈论人物角色的运动,而不是NPC的运动。 他们的资源是否可用于这种运动? 方程式或algorithm解释在维基上?

我正在使用XNA框架,有没有什么可以帮助这个?

那么,第一个要点很简单。 您只需在世界或像素坐标中存储和操作角色的位置,而不是基于瓦片的坐标。 如果您遇到问题,可能是因为您的世界和平铺空间的表示方式混淆不清,所以或许您应该发布更多细节或询问一个单独的具体问题。

对于第二点来说,最直接的方法是将玩家的(归一化)运动vector添加到墙的法线vector,然后重新归一化。 所得到的vector的分量的符号将指示墙壁如何与玩家的运动相关,而vector本身指示玩家现在可以移动的方向。

对于第三点,假设墙壁和玩家都有碰撞矩形,您应该能够确定玩家的碰撞矩形与墙的碰撞矩形有多less接触。 例如,如果玩家正在向右移动并击中垂直墙,则比较碰撞矩形的Y轴范围 – 如果玩家的范围超过墙的范围某个阈值,例如玩家Y的75%那么你就会“欺骗”玩家走向门外。

我已经在这里做了大量的假设,关于你的对象模型在你的代码中的外观以及你select的技术 – 主要是由于你的问题的一般性。 我试图提出一些简单的方法(虽然也许不是最佳的)。 如果你能提供更具体的信息,无论是在这个问题上,还是在新的问题上,我都可以尝试提供更多的细节或更好的主意。

第二点可能的答案是使用点积(ab * normalized(b))沿着墙vector投影运动员的运动vector。 然后,你得到一个向量,告诉你在向墙的方向移动玩家有多远,如果你通过该向量移动玩家,你会得到一个沿着墙的“幻灯片”。 在之前的游戏项目中为我工作得很好。

Josh很好的答案,但我会添加一些建议: – 关于滑墙的更多信息,看看我的问题 – 从这个答案我设法得到它的工作非常好。 – 如果我没有弄错,当走到屏幕上时,链接将轻松alignment到最接近的整个水平方格。 这样,当你到达门口时,你更有可能被排队(可能是错误的)。 – 为了方便通过门,确保你的角色的碰撞箱比门的宽度小。

为了校正进入门,可以使门的碰撞物体比门的图像稍大。 这会导致Josh提出的相同的效果,但不必计算与墙的碰撞矩形的接近度。