GoDot-Input.is_action_Just_Press()运行两次 [英] Godot - Input.is_action_just_pressed() runs twice

查看:42
本文介绍了GoDot-Input.is_action_Just_Press()运行两次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我设置了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的调用。并且在一帧中可以有多个。因此,可以有多个_inputwhereis_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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆