Optimization 如何缩短此代码或使其更高效?

Optimization 如何缩短此代码或使其更高效?,optimization,godot,gdscript,Optimization,Godot,Gdscript,我想知道是否有更有效/更短的方法可以得到相同的结果。 如果按键,函数get_action_strength(action)返回布尔值, 谢谢 if的第二个分支可以更改为smth,如下所示: degValue+=-45*int(输入。获取动作强度(“向右移动”))+45*int(输入。获取动作强度(“向左移动”)) 当该值为False并将其转换为int时,它将变为0,乘法结果为0。因此,只添加一个值 另外,如果问题标记为“python”,为什么要用“var”关键字声明变量?=) 您可以使用向量并从

我想知道是否有更有效/更短的方法可以得到相同的结果。 如果按键,函数get_action_strength(action)返回布尔值, 谢谢


if的第二个分支可以更改为smth,如下所示:

degValue+=-45*int(输入。获取动作强度(“向右移动”))+45*int(输入。获取动作强度(“向左移动”))

当该值为False并将其转换为int时,它将变为0,乘法结果为0。因此,只添加一个值


另外,如果问题标记为“python”,为什么要用“var”关键字声明变量?=)

您可以使用向量并从其组件计算角度:

motion_vec_x = 0
motion_vec_y = 0

if (Input.get_action_strength("move_forward")):
    motion_vec_y = 1
if (Input.get_action_strength("move_backward")):
    motion_vec_y = -1
if (Input.get_action_strength("move_left")):
    motion_vec_x = -1
if (Input.get_action_strength("move_right")):
    motion_vec_x = 1

degValue = None
if abs(motion_vec_x) > 0 or abs(motion_vec_y) > 0:
    degValue = np.arctan2(motion_vec_x, motion_vec_y) / np.pi * 180

print(degValue
这将产生(取决于arctan2实现)0°的向上角度,对于向左倾斜的向量为负角度,对于向右倾斜的向量为正值。笔直向下的角度将为180°。您可以轻松地将其转换为您需要并认为合适的任何角度值

如果按键,函数get_action_strength(action)返回一个布尔值

不,没有。返回浮动。你可以利用这个优势

您可以这样做:

var x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
var y = Input.get_action_strength("move_forward") - Input.get_action_strength("move_backward")
此外,如果参数为
0
,则将返回
0
。这是使用
atan2
而不是
atan
的好处之一:您不必担心被
0
除法。因此,您不需要检查
x
y
是否不是
0
,只需使用它们即可

顺便说一下,
y
atan2
中位于
x
之前

还有一件事,有一个函数,如果你有弧度并且想要度:

var x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
var y = Input.get_action_strength("move_forward") - Input.get_action_strength("move_backward")
var degValue = rad2deg(atan2(y, x))
如果你真的想,你可以内联变量,它将是一个单行程序


啊,对不起,我可能误解了。你希望它是离散的,对吗?你想要:


谢谢,这样更好,代码现在是9行而不是17行。代码实际上是gdscript,但与python非常相似,因此我使用python标记,因为社区更大。因此,期望的可能输出为0°、45°、90°、135°、180°、225°、270°、315°?是的,基于输入booleansPerfect!我不知道arctan2,我设法把它缩短成4行,我想我不能再短了。谢谢。是的,我注意到了我的错误,以为是布尔型的。这第二个解决方案绝对是最好的,可以放在一条线上,非常感谢。
var x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
var y = Input.get_action_strength("move_forward") - Input.get_action_strength("move_backward")
var degValue = rad2deg(atan2(y, x))
var x = ceil(Input.get_action_strength("move_right")) - ceil(Input.get_action_strength("move_left"))
var y = ceil(Input.get_action_strength("move_forward")) - ceil(Input.get_action_strength("move_backward"))
var degValue = rad2deg(atan2(y, x))