• 技术交流 | 动物跳跃深度剖析
  • 楼主: yty |查看: 9749|回复: 1
yty 管理员

主题

好友

2104

积分
yty 发表于 2012-7-20 00:02:05
本帖最后由 yty 于 2012-7-20 00:02 编辑

尽管当动物的表现不尽如人意的时候我们往往怪罪运气不好,但是如果你有一双足够雪亮的眼睛,加上足够的游戏逻辑知识,你完全可以断定动物在碰到某种地形时会做出什么样的反应。在很多情况下,确定什么样的地形会使动物们跳跃是至关重要的,尤其是当你不能直接把动物施放在敌人附近,而需要在远处施放动物们,让它们行走一程的时候。

绵羊、臭鼬和鼹鼠各自具有各自的随机跳跃高度及距离,它们各自也具有不同的运动属性,不过让它们跳跃的因素却是相同的。本篇帖子将为你深度解析各种动物,再加上老妇人、救世军和疯牛的跳跃及行走规律。

上坡

我们从最抽象最简单的情况说起,即动物在一个长平面上运动。我们把动物身下的那个像素叫做它所处的地平线。当动物沿着平面行走时,它只考虑运动前方一小段距离的地形情况是否让它做出一个跳跃。现在让我们只考虑地平线上方的障碍物。

当绵羊、臭鼬或者鼹鼠发现水平面前方有一个1×1像素大小,高度处于地平线上方1像素的障碍物时,会做出什么反应?只要在这之前没有其他物体让它跳跃,这些动物会在距离这个障碍物像素大约20像素的位置起跳(从动物前脚开始测量)。这种跳跃叫做动物的近距离跳跃。接下来,我们让这个1×1像素的障碍物升高,我们会发现,这个障碍物的高度为地平线上方1~5像素时,动物都会做出近距离跳跃。当障碍物升高到6~8像素时,动物不会跳跃,而是直接从障碍物下走过。然而当障碍物升高到9~13像素时,动物们又探测到了障碍物的存在,不过这次水平距离障碍物50像素时,它们就会开始跳跃,这叫做远距离跳跃


下图展示了动物遭遇一竖列像素障碍的情况。只要下图中黄色部分的任何一个像素存在,动物就会做出远距离跳跃。如果所有黄色部分像素不存在,而红色部分的任何一个像素存在,动物会做出近距离跳跃。如果所有黄色和红色部分像素都不存在,那么动物会直接向前走过去。这种奇怪的判定方式的解释是,动物们的爆炸掩模是一个7像素宽,5像素高的矩形。掩模中的任何一个像素都要检查从其本身的高度到其上方8像素高度内是否存在障碍,如果存在,做出跳跃的判断。


在真实游戏中,动物前方的地形一般是大量的像素块,而不是这么整齐的像素列。要决定动物是否跳跃,只需要找到第一列动物们前方20或者50像素会遇到的像素列,再做出决定。

下坡

现在我们要问,动物们遇到一个1像素深的“悬崖”时,会作何反应?如下图所示,动物会照常行走,不受任何影响。只有当悬崖高度至少达到4像素时,动物才会跳起。跳起的时机是,动物的掩模下方没有地面支撑时。

不过这并非意味着动物们在下一个斜度固定的坡时会保证不跳跃。当一只动物开始下坡时,游戏会计算出水平速率恒定条件下,下一帧动物所处的位置,如果当前帧与下一帧动物下降高度过大,动物就会跳跃。上坡与下坡的最大坡度各种动物不尽相同,下文详叙。

狭窄通道

也许你平时已经发现了,当动物们头顶上存在大量地图时,动物不会跳跃,会一直向前行走。这种情况被称作动物处于行走模式。在行走模式下,动物会直接走过任意不超过最大可跨越高度的障碍物,遇到任意超过最大可跨越高度障碍物就会掉头,遭遇任何悬崖都会直接走下去。只有绵羊、臭鼬和鼹鼠具有行走模式,老妇人、救世军和疯牛不受行走模式限制。

触发行走模式的条件是,在动物上方49~53像素位置有地图存在。下图显示了会使水平地面上的动物进入行走模式的所有像素高度线。你会看到绵羊遭遇图中这个4像素高的障碍物时没有跳跃,因为它在距离障碍物20像素时,侦测到上方有地图存在,所以再行走模式下,从而不会跳跃。


上面我们讨论了决定行走模式的像素高度,接下来要问的问题是,需要多长的像素条才可以使得动物们进入行走模式呢?答案是,1个像素就够了。只要这个像素位于动物掩模的7像素宽度内,动物就会受到影响。所以说,上图中那条红线中的任何一个像素,都会导致位于其下方的动物进入行走模式。而下图完美地展示了一个小小的1×1像素令绵羊无法跳跃的情况。


图中上方的红色像素位于悬崖右边2像素处。它使得绵羊没有跳起,而是直接走进了坑中。如果这个像素向左挪动1像素位置,绵羊会有时候探测到它而不跳起,有时候不能探测到它而跳起。如果这个像素在悬崖线正上方,绵羊就一定不会探测到它从而一定会跳起。在这种情况下,是掩模的后方像素来探测上方是否有像素影响的。

本节讨论的内容对于“上坡”一节所讨论的跳跃也有影响。因为掩模中的任何一个像素探测到影响像素都会导致动物跳跃,所以当动物从狭窄通道出来,离开行走模式进入普通模式时,使其做出近距离跳跃和远距离跳跃的动物障碍物间距最多可以比正常情况下少7像素。

动物掉头

现在考虑如下情况:在水平地面上有一堵5像素或更高的墙壁,绵羊、臭鼬或者鼹鼠恰巧降落在与墙间隔不到近距离跳跃的距离内(即动物掩模的最后面的像素与墙壁距离在20像素以内),会发生什么情况呢?动物此时一定会碰撞墙壁,然后掉头,在同一帧开始跳跃。



掉头的另一种情况是在行走模式下动物撞墙。这两种情况是最基本的,不过也存在其他情况。动物在空中碰墙时,有6.25%的概率掉头。这种情况前提是动物已经跳跃过,刚施放的未跳跃过的不算。当动物在空中碰墙反弹落地时,也有6.25%的概率掉头,前提同上。

对于臭鼬和鼹鼠,还存在一个特殊情况。当臭鼬刚刚弹墙,下降过程中,如果存在任何与面对方向相反的速度,此时按下空格键释放毒气,臭鼬在空中会立即转向。相似地,如果鼹鼠因为遇墙反弹导致其具有与朝向反向的速度,按下空格键,那么鼹鼠会朝向反方向发射。

行走模式下动物能跨越的东西

绵羊、臭鼬和鼹鼠可以跨越任何6像素宽度内的坑,如图所示。绵羊和臭鼬有中等概率跨越7像素宽的坑。不处于行走模式时,绵羊、臭鼬和鼹鼠会跳过任何7或8像素宽(4像素深)的坑。不具有行走模式的动物可以利用其小跳跨越令人惊奇的宽度。疯牛、老妇人和救世军可以保证跨越12像素宽的坑。疯牛会以比较大的概率掉入13~18像素宽的坑中。老妇人和救世军会以比较大的概率掉入13~16像素宽的坑中。值得注意的是,升龙拳和自杀制造的坑宽度为19像素,所以动物们是一定无法跨越的。

除了鼹鼠外,其他动物在行走模式下或者在距离障碍物不到20像素释放时,会跨越4像素高的障碍。5像素或更高的障碍会让它们掉头。令人惊奇的是,这种情况下鼹鼠会跨越8像素及以下的障碍,9像素或更高的障碍会让鼹鼠掉头。

攀爬连续斜坡

我们已经知道了各种动物能够跳过的最大高度,但是在实际游戏中,一段障碍物或者坡度往往会紧紧跟随着另一个斜坡,使得动物们侦测到的坡度十分陡峭。为了决定每种动物能够连续爬升的坡度,考虑以下几种情况是十分必要的。
  • 由大块土地构成的连续上坡,这是游戏中通常出现的情况;
  • 由细条形土地构成的上坡,没有大块土地支撑,使得大多数动物只会爬升不会跳跃(臭鼬除外);
  • 两边都有土地构成的上坡通道,动物在其中进入行走模式。
对于这三种情况,下表给出了每种动物能够爬上的最大坡度,近似到0.5,同时给出了游戏中接近的地形。当动物们下坡时,能够保持行走而不跳跃的最大坡度由下表第三列确定,其中鼹鼠下坡保持行走的最大坡度为7(行走模式),或者3(非行走模式)。


评分

参与人数 1威望 +10 收起 理由
百战pp虫 + 10 顶!

查看全部评分

只言片语也是一种鼓励
返回板块
回帖列表

主题

好友

2104

积分
yty 发表于 2012-7-20 00:02:28 |显示全部楼层
本帖最后由 yty 于 2012-7-20 19:41 编辑

尽管实际游戏中很难出现完美的理想斜坡,但是你也可以把斜坡一段一段分开来看,判断是否存在一段坡度过高以至于超过了动物的最大爬升坡度。例如,如果你发现一个上坡的坡度大多数为1或不到1,但是有一部分坡度在3左右,那么你基本可以断定,疯牛会顺利的爬上坡度为1的那部分,在陡坡的底端碰墙爆炸。

爬坡后接跳跃

还有一种情况使动物跳跃。绵羊、臭鼬或者鼹鼠爬上一个4像素或更高的高度之后,会立即跳跃(绵羊和臭鼬的最大爬升高度是4像素,鼹鼠是8像素)。这种情况发生的频率不高,因为通常在能做出这种爬坡之前,已经有地形让动物跳跃起来了。

下图展示了这种跳跃必然出现的一种情况。站在一个4像素高的障碍物前20像素以内的距离,释放动物,动物不会立即跳跃,而是会爬上这个障碍物,然后才跳起。


关于穿墙

当一只动物爬坡并且头顶遇到一个使其7×5的碰撞掩模不能通过的障碍物时,动物会被迫掉头。游戏会检查下一帧是否会出现动物碰撞掩模受到地形影响的情况,如果将要出现,那么游戏会使动物掉头。然而,这种检查是逐帧进行的,如果动物爬升的速度足够快,理论上会存在动物穿越一小段墙的可能性。

在这段著名的视频中,开发人员Deadcode发现只有鼹鼠可以穿墙。他设计了这个地图,其中鼹鼠可以循环连续爬墙穿墙,供欣赏。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?新虫注册

x

使用道具 举报

您需要登录后才可以回帖 登录 | 新虫注册

本版积分规则

 
返回顶部