碰撞
碰撞是一种地图中会发生在玩家与实体、抛射物之间的交互效果。
介绍碰撞前,我们需要理解单位长度的概念。
想象一下,每一格网格都是由许多最小的正方形单元构成的,我们称这种最小的正方形单元为单位长度。
每一个单位长度都代表着可以一个玩家在任何一个给定的时间里占据的一个单一的、独一无二的位置。每一个单位长度都可能代表一个玩家的中心位置。
- 一格网格在地图中的大小为一个
32*32
个单位长度的正方形,这表明一名玩家可以在一格网格中占据1024
个独一无二的位置。
实体接触
不同的实体拥有不同的碰撞箱体积。
考虑玩家的中心点,在靠近某些实体后会判定和实体发生接触(碰撞):
- 多数标准DDRace实体(多数实体都是DDRace模式独有的,例如冻结区域和传送区域)的碰撞体积为
32x32
个单位长度的正方形区域,玩家接触会触发对应效果; - 死亡 区域的碰撞体积为
50x50
个单位长度的正方形区域,玩家接触会触发死亡; - 墙体(包括不可钩墙体,可钩墙体和可穿透墙体)的碰撞体积为
60*60
个单位长度的正方形区域,会阻止玩家进入其中; - 冻结激光方块的情况较为复杂。我们假定一束冻结激光垂直向上发射,发射点位于底部:(这束激光由“顶部”,中间两格高的光线,和最底部的光源组成。)
- 对于中间光线的左右两侧,冻结的判定区域从中线开始,向左右各延伸
28
个单位长度; - 对于“顶部”,冻结的判定区域从中心点开始,半径为
27
个单位长度的圆形区域; - 对于底部光源,冻结的判定区域是从中心开始,向下延伸
28
个单位长度的区域。
- 对于中间光线的左右两侧,冻结的判定区域从中线开始,向左右各延伸
- 多数标准DDRace实体(多数实体都是DDRace模式独有的,例如冻结区域和传送区域)的碰撞体积为
需要注意的一点是冻结激光是可以平移和旋转的,这种情况下判定十分复杂。
- 阻滞器的情况会更加复杂一些。请注意——由于阻滞器容易被穿过,因此在拥有足够大的速度去穿过阻滞器的情况下讨论单向板的碰撞体积没有多大的意义:
- 单向阻滞器(假定向上)的判定区域为从中心开始,向上延伸
34
个单位长度的距离,向左、向右和向下延伸16
个单位长度的距离,当玩家与之发生碰撞时,单向阻滞器会阻止玩家向与箭头相反的方向移动;
- 单向阻滞器(假定向上)的判定区域为从中心开始,向上延伸
- 激光门的判定方式与阻滞器相同,因此也可以用足够大的速度去穿过。
- 阻滞器的情况会更加复杂一些。请注意——由于阻滞器容易被穿过,因此在拥有足够大的速度去穿过阻滞器的情况下讨论单向板的碰撞体积没有多大的意义:
玩家间碰撞
Tee的碰撞体积为一个直径为28
个单位长度的圆,但实际上当两个玩家的中心距离为35
个单位长度时就已经发生了交互。
玩家之间发生碰撞后,玩家会获得与碰撞作用点相反方向的速度,获得的速度大小取决于玩家之间发生碰撞时的中心距离(发生碰撞时,中心距离越远,获得的速度越小)以及发生碰撞时的角度(当碰撞的方向与两名玩家的中心连线重合时,可以获得最大的速度)。
玩家拥有的钩索强弱等级也会影响到碰撞速度。拥有强钩的玩家发生碰撞时会稍微多产生一点速度。
抛射物碰撞
待办: Add hitboxes for a grenade