平台游戏应该如何运作?

时间:2014-02-12 13:53:13

标签: c# xna collision-detection pixel game-physics

我一直在开发一款游戏,玩家应该能够与我放在屏幕上的任何图像碰撞,而不使用像瓷砖地图一样多的矩形。我尝试使用基于像素的碰撞系统:Per-Pixel Collision detection

但我一直遇到问题;我从Andrew Russell的“碰撞检测和碰撞响应之间的差异”中学到了很多东西。"因此,当我尝试改进游戏时,我一直遇到这个问题:YouTube Video

之前我曾尝试使用基于磁贴的系统,但主要艺术家要求我找到一种方法,我们可以使用更动态的系统。我确实被引导到一个名为Farseer Physics Engine的物理引擎,Andrew Russell用于 Dark 和他正在制作的新游戏。


*我希望玩家对象不会陷入墙壁,并且可以使用其他方式创建碰撞系统(最后的手段是平铺地图)。

*玩家应该能够爬坡。

*玩家应该能够抓住墙上的东西(我已经知道如何做到这一点)


问题

如何让碰撞知道玩家何时会与地图发生碰撞? (我应该有更多的检测水平吗?)

在视频中我创建了3层矩形,每个矩形包含4个矩形,顶部,左侧,右侧和底部;即使这些层是阻止玩家进入地板的,玩家仍然会这样做,碰撞检测和碰撞响应真的有延迟吗?

假设我有一个包含,顶部,底部,左侧和右侧的检测盒,它向下延伸约5个像素,当它碰撞时,它会保持绳索相互撞击并说玩家无法通过此位置。那会有用吗?

*此外,当他碰撞时,玩家会以某种方式获得额外的跳跃。当玩家的顶部与物体碰撞时,它将停止动量,因为它也在左右触摸玩家,因为它在物体内部。我真的很想得到一些指导。

1 个答案:

答案 0 :(得分:3)

大多数平台游戏(我敢说,大多数游戏引擎)都有某种情景符号/暗示来帮助行为定义。作为一个小例子,这里我们有一个“平台角”的情况。对不起基本形状。

enter image description here

基本上,我们有:

  • 一个演员,由其橙色反应框定义;
  • 平台
  • 右上角提示,
  • 角落提示的意识区域。

类似的游戏机制通常涉及某种正向量检测,以及您从该迭代中获得的动作库。例如:

enter image description here

角色的矢量将首先击中平台区域:

  • 如果垂直向量(VV)> 5,启动splatter动画,mode = dead。设置VV = 0。
  • 如果VV < 5,开始登陆动画。设置VV = 0。

enter image description here

角色的矢量将首先击中角落提示区域:

  • 如果垂直向量(VV)> 5,开始泼溅动画,模式=死,顺时针旋转。
  • 如果VV < 5,开始滑动动画。
    • 用户操作=无?应用正水平向量(向右滑动),继续下降。
    • 用户操作=抢?开始抓取左侧动画,停止VV,将用户移动到基准级别(从当前位置插入到最佳位置)。

现在,我们勇敢的角色试图跳跃并抓住一个角落。

enter image description here

当Actor的反应框进入右角提示的反应区域时,我们会进行一些检查:

  • 水平向量(HV)是否为负(即角色是从右向左移动)?
    • 是UserAction = tryGrab?开始抓住左侧动画,停止VV,将用户移动到基准级别。
    • 是UserAction = tryJump?恢复HV矢量,开始跳跃动画。

TL / DR; 使用提示来帮助您的行为决策过程。