首页 > 解决方案 > 我的向量 3 速度上限公式有什么问题?

问题描述

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,但事实并非如此。

标签: gdscript

解决方案


你确定它也不会发生在右后方向吗?我认为这可能与 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。


推荐阅读