Godot debug window 不触发 area2d 信号

Godot debug window not triggering area2d signals

Video of what's happening exactly

规格是:

这周刚开始学习 godot 并且因为这种奇怪的行为而浪费了几个小时。

Godot 细节:

是否有什么我应该知道的导致信号仅在调试 window 在另一个显示器上时触发?我是否应该将调试 window 移动到另一个显示器并相信游戏会正常运行?

代码片段

在我的动画控制器中创建 Area2D

func _create_shape_with_collision(s : Shape2D, parentNode : Node) -> Node:
    var ret = Area2D.new()
    ret.connect('body_entered', self, '_check_body_entered')
    var c = CollisionShape2D.new()
    c.shape = s
    parentNode.add_child(ret)
    c.disabled = true
    c.name = 'collision_shape'
    ret.add_child(c)
    return ret

信号函数

func _check_body_entered(body : Node):
    print(body.name)

PS:尝试在 Godot 的界面中输入一些内容以帮助自动完成,但我创建的 classes 无法正常工作。

PS2:在 godot 的 reddit 页面上发布了同样的消息,希望能有更好的知名度

确保 Area2D 节点中有匹配的碰撞层和遮罩。
Shape2D 是一种资源,这意味着如果您不创建 .new() ,那么所有 CollisionShape2D 都使用相同的形状实例。如果任何人明确地设置它 free 它对每个人都消失了(所以如果你不小心分配了一个空形状,请尝试打印)。当 CollisionShape2D 准备就绪时,在分配后调整大小没有发生一些奇怪的事情。 但你也有 c.disabled = true 可能不应该在那里。

因为@Theraot 为在 Godot 的 Github 页面上写一个问题铺平了道路,我能够确定上述 bug 的原因,同时创建一个最小的项目。

其实跟代码一点关系都没有,而是跟项目设置有关。物理 FPS 设置为 60,而我的辅助屏幕能够捕获事件,因为默认情况下 VSYNC 也处于打开状态(在刷新率下设置 FPS 上限,辅助屏幕为 24hz)。

将物理 FPS 增加到 120(此时为 empyrical)使信号在所有显示器上都有效。

将很乐意接受更好的答案,解释更改此类数字的影响(对设备的压力等),如果这是一种不好的做法,或者是否有另一种方法可以为 Area2Ds 或 PhysicsBody2Ds 配置单个更快的刻度.由于我目前缺少knowledge/research,无法写出这样的答案。试图在这个时候写它是一种诡辩。

由于我只是在编写游戏设计文档时编写一些基本的游戏元素,所以到目前为止对我来说还不错。

编辑:

在用户@Theraot 的洞察之后,我忽略了 _process 和 _physics_process 的不同之处;对于我的用例,我所做的大部分工作应该在 _physics_process 内,因此我可以将引擎的物理 FPS 恢复为默认值。