苏州工业园区苏雅璐308号信投大厦18楼-22楼 17717624695 jiuyouapp@www.j9.com

资讯中心

同时按两个方向时怎样避免斜向速度变快:十八组方向按键的合成速度·实例15

2026-11-03

水平与竖直移动各给同样速度,两个方向同时生效时向量长度会比单轴更大。若设计希望所有方向速度相同,需要按合成方向的长度进行归一化,同时处理相反按键抵消和零方向。

下面把一个游戏界面或模拟规则拆成可复查的记录。每组输入独立给出,先确认单位、先后次序和边界,再核对结果。它不依赖具体游戏的隐藏参数,读者可以直接挑选几步手工复算。

输入与规则

四个方向键可以任意同时按下,右减左得到横向分量,上减下得到纵向分量。原始移动为分量乘基础速度;归一化模式先除合成方向长度再乘基础速度。零方向输出零,记录十八次独立输入,不累计位置。

基础速度7,十八组按键为0或1 [[1, 0, 1, 0], [1, 1, 1, 1], [0, 0, 0, 0], [1, 1, 1, 0], [0, 0, 0, 0], [1, 0, 1, 0], [1, 1, 1, 1], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 1, 1], [0, 0, 0, 0], [0, 0, 0, 1], [1, 0, 1, 0], [1, 1, 0, 1], [0, 0, 0, 1], [1, 0, 1, 1], [1, 0, 1, 0], [1, 0, 0, 0]]

逐步记录

按键[右,左,上,下][1, 0, 1, 0],抵消后方向[1, 1],原始速度[7, 7],原始速度长度9.899495;统一长度后的速度[4.949747, 4.949747]。目标速度长度为7。

按键[右,左,上,下][1, 1, 1, 1],抵消后方向[0, 0],原始速度[0, 0],原始速度长度0.0;统一长度后的速度[0.0, 0.0]。零方向直接输出零。

按键[右,左,上,下][0, 0, 0, 0],抵消后方向[0, 0],原始速度[0, 0],原始速度长度0.0;统一长度后的速度[0.0, 0.0]。零方向直接输出零。

按键[右,左,上,下][1, 1, 1, 0],抵消后方向[0, 1],原始速度[0, 7],原始速度长度7.0;统一长度后的速度[0.0, 7.0]。目标速度长度为7。

按键[右,左,上,下][0, 0, 0, 0],抵消后方向[0, 0],原始速度[0, 0],原始速度长度0.0;统一长度后的速度[0.0, 0.0]。零方向直接输出零。

按键[右,左,上,下][1, 0, 1, 0],抵消后方向[1, 1],原始速度[7, 7],原始速度长度9.899495;统一长度后的速度[4.949747, 4.949747]。目标速度长度为7。

按键[右,左,上,下][1, 1, 1, 1],抵消后方向[0, 0],原始速度[0, 0],原始速度长度0.0;统一长度后的速度[0.0, 0.0]。零方向直接输出零。

按键[右,左,上,下][0, 1, 0, 0],抵消后方向[-1, 0],原始速度[-7, 0],原始速度长度7.0;统一长度后的速度[-7.0, 0.0]。目标速度长度为7。

按键[右,左,上,下][0, 0, 1, 0],抵消后方向[0, 1],原始速度[0, 7],原始速度长度7.0;统一长度后的速度[0.0, 7.0]。目标速度长度为7。

按键[右,左,上,下][0, 0, 1, 1],抵消后方向[0, 0],原始速度[0, 0],原始速度长度0.0;统一长度后的速度[0.0, 0.0]。零方向直接输出零。

按键[右,左,上,下][0, 0, 0, 0],抵消后方向[0, 0],原始速度[0, 0],原始速度长度0.0;统一长度后的速度[0.0, 0.0]。零方向直接输出零。

按键[右,左,上,下][0, 0, 0, 1],抵消后方向[0, -1],原始速度[0, -7],原始速度长度7.0;统一长度后的速度[0.0, -7.0]。目标速度长度为7。

按键[右,左,上,下][1, 0, 1, 0],抵消后方向[1, 1],原始速度[7, 7],原始速度长度9.899495;统一长度后的速度[4.949747, 4.949747]。目标速度长度为7。

按键[右,左,上,下][1, 1, 0, 1],抵消后方向[0, -1],原始速度[0, -7],原始速度长度7.0;统一长度后的速度[0.0, -7.0]。目标速度长度为7。

按键[右,左,上,下][0, 0, 0, 1],抵消后方向[0, -1],原始速度[0, -7],原始速度长度7.0;统一长度后的速度[0.0, -7.0]。目标速度长度为7。

按键[右,左,上,下][1, 0, 1, 1],抵消后方向[1, 0],原始速度[7, 0],原始速度长度7.0;统一长度后的速度[7.0, 0.0]。目标速度长度为7。

按键[右,左,上,下][1, 0, 1, 0],抵消后方向[1, 1],原始速度[7, 7],原始速度长度9.899495;统一长度后的速度[4.949747, 4.949747]。目标速度长度为7。

按键[右,左,上,下][1, 0, 0, 0],抵消后方向[1, 0],原始速度[7, 0],原始速度长度7.0;统一长度后的速度[7.0, 0.0]。目标速度长度为7。

同时按相反键先抵消,再处理长度;斜向归一化只调整长度,不把方向改变成水平或竖直。

复核方法和适用范围

分别核对原始速度平方为基础速度平方乘方向长度平方。非零归一化向量的长度应等于基础速度,且方向与原方向一致;相反键抵消以后再做判断,不对零向量除以零。

本例没有加速度、模拟摇杆幅度或碰撞处理。输出为便于阅读保留的小数,复核允许最后几位舍入误差。是否需要统一斜向速度由游戏规则决定,归一化不是对所有玩法都必须采取的选择。

练习时可以只改动一项输入,预测从哪一步开始出现变化,再逐步比较。空状态、数值零和无法判断要分别记录;不要为了让最后结果一致而忽略中途的偏差。边界与同分约定同样属于规则,复核时应一并保留。