我的vector 3速度上限公式有什么问题?

时间:2019-05-16 23:21:05

标签: gdscript

3D运动。如果玩家向左移动,它们将以任何其他方向的两倍速度移动。 MoveDirection.x和z分别等于模拟摇杆方向,范围从1到-1。

MoveDirection = Vector3(MoveDirection.x - (MoveDirection.z / 2 * MoveDirection.x), MoveDirection.y, MoveDirection.z - (MoveDirection.x / 2 * MoveDirection.z))

我认为,如果沿对角线方向移动,结果将约为0.5、0、0.5,但事实并非如此。

1 个答案:

答案 0 :(得分:0)

您确定它也不会在右后退方向上发生吗?我认为这可能与Godot处理算术顺序有关。例如,如果Godot在除法之前进行了乘法运算(就像我认为的那样),则假定我们使用整数值(1或-1),那么Godot将以这种方式处理代码中的第一个Vector3坐标::

Using - (MoveDirection.x - (MoveDirection.z / 2 * MoveDirection.x)
Substitute values for - (x,z)

FOR VALUES  (1 , -1)
(1) - (-1 / (2 * 1))
(1) - (-1) / (2)
(1) - (-0.5)
= 1.5       <<<<<<-----------    THIS IS YOUR PROBLEM (I THINK)

FOR VALUES  (-1, 1)
(-1) - (1 / (2 * -1))
(-1) - (1) / (-2)
(-1) - (-0.5)
= -0.5

FOR VALUES   (1 , 1)
(1) - (1 / (2 * 1))
(1) - (1) / (2)
(1) - (0.5)
= 0.5

FOR VALUES  (-1, -1)
(-1) - (-1 / (2 * -1))
(-1) - (-1) / (-2)
(-1) - (0.5)
= -1.5       <<<<<<-----------    THIS SHOULD ALSO BE A PROBLEM (I THINK)

如果我的数学错了,请原谅我,现在是凌晨5:00。如果我错了,请告诉我,我将删除此答案。

编辑:事实证明算术顺序甚至都没有关系,它首先与除法运算相同。我的建议是找到一种从受影响的结果中减去1(或加1)的方法。也许像这样:if (MoveDirection.x > 0) AND (MoveDirection.z < 0),从结果中减去1。