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