规格如下:
这周刚开始学习戈多,因为这种奇怪的行为浪费了很多时间。
戈多的具体情况:
当调试窗口在另一个显示器上时,是否有什么东西是我应该知道的,导致信号只触发?我是否应该将调试窗口移到另一个显示,并相信游戏会工作?
代码段
在我的动画控制器中创建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的界面中键入一些帮助自动完成的内容,但是我创建的类不能正常工作。
PS2:在戈多的reddit页面上发布了同样的信息,希望能有更好的可见度
发布于 2021-03-16 18:50:49
因为@Theraot为在Godot的Github页面上编写问题铺平了道路,所以我能够确定上述错误的原因,同时创建了一个最小的项目。
实际上,它与代码无关,而是与项目设置有关。物理FPS设置为60,而我的辅助屏幕能够捕获事件,因为VSYNC在默认情况下也是打开的(以刷新速率限制FPS,辅助屏幕为24 60)。
将物理FPS提高到120 (此时为空白)使信号在所有显示器上工作。
会乐意接受一个更好的答案,解释改变这样的数字(对设备等造成的压力)的影响,如果这是一种糟糕的做法,或者是否有另一种方式为Area2Ds或PhysicsBody2Ds配置单个更快的滴答。由于我目前缺乏知识/研究,所以无法写出这样的答案。在这一点上试图写出它将是一种诡辩。
由于我只是在编写游戏设计文档时编写了一些基本的游戏元素,所以到目前为止,它对我来说是很好的。
编辑:
在用户@Theraot的洞察之后,我忽略了不同的_process和_physics_process是如何工作的;对于我的用例,我所做的大部分工作应该在_physics_process中,这样我就可以将引擎的物理FPS恢复到默认值。
发布于 2021-03-16 14:21:58
确保在Area2D节点中有匹配的碰撞层和掩码。
Shape2D是一种资源,这意味着如果不创建.new(),那么所有CollisionShape2D都使用相同的形状实例。如果有人显式地释放了它,那么它就不再适用于每个人了(因此,如果您意外地分配了一个空形状,请尝试打印)。当CollisionShape2D准备就绪时,在分配not之后重新调整大小有一些奇怪之处。但是,您也有可能不应该存在的c.disabled = true。
https://stackoverflow.com/questions/66649829
复制相似问题