GoDot-Input.is_action_Just_Press()运行两次 [英] Godot - Input.is_action_just_pressed() runs twice
问题描述
所以我设置了Q和E来控制固定在8个方向上的摄像机。问题是,当我调用Input.is_action_Just_Press()时,它设置了两次True,因此它将其内容设置了两次。
它对计数器的作用如下:
0 0 0 1 1 2 2 2
如何修复THX?
if Input.is_action_just_pressed("camera_right", true):
if cardinal_count < cardinal_index.size() - 1:
cardinal_count += 1
else:
cardinal_count = 0
emit_signal("cardinal_count_changed", cardinal_count)
推荐答案
在_process
或_physics_process
如果您的代码在_process
或_physics_process
中运行,则它应该可以正常运行,而不会报告两次。
这是因为如果在当前帧中按下操作,is_action_just_pressed
将返回。默认情况下,这意味着图形框架,但该方法实际上检测它是在物理框架还是图形框架中被调用,如its source code中所示。而且按照设计,每个图形帧只有一个_process
调用,每个物理帧只有一个_physics_process
调用。
在_input
但是,如果您在_input
中运行代码,请记住,对于每个输入事件,您都会得到_input
的调用。并且在一帧中可以有多个。因此,可以有多个_input
whereis_action_just_pressed
调用。这是因为它们位于同一帧(默认的图形帧)中。
现在,让我们看看建议的解决方案(摘自comments):
if event is InputEventKey:
if Input.is_action_just_pressed("camera_right", true) and not event.is_echo():
# whatever
pass
正在测试是否在当前图形框架中按下了"camera_right"
操作。但它可能是当前正在处理的输入事件(event
)。
因此,您可以愚弄此代码。同时按配置为"camera_right"
和其他的键(或快到在同一帧内),执行将进入两次。这正是我们正在努力避免的。
要正确避免,您需要检查当前event
是否为您感兴趣的操作。您可以使用event.is_action("camera_right")
来执行此操作。现在,你有一个选择。您可以这样做:
if event.is_action("camera_right") and event.is_pressed() and not event.is_echo():
# whatever
pass
这就是我的建议。它检查它是否为正确的操作,是否为按下(不是释放)事件,并且不是回显(这是keyboard repetition形式)。
或者您可以这样做:
if event.is_action("camera_right") and Input.is_action_just_pressed("camera_right", true) and not event.is_echo():
# whatever
pass
我不建议这样做,因为:第一,它更长;第二,is_action_just_pressed
实际上不打算在_input
中使用。因为is_action_just_pressed
与框架的概念有关。is_action_just_pressed
的设计旨在与_process
或_physics_process
一起使用,而不是_input
。
这篇关于GoDot-Input.is_action_Just_Press()运行两次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!