【发布时间】:2022-01-18 07:43:36
【问题描述】:
所以当我的玩家从地图上掉下来时,我希望重新加载关卡。我使用了一个带有碰撞形状 2d 的 area2d 来创建一个区域,当玩家与该区域发生碰撞时该区域将调用一个函数。但是,当游戏在包含此代码的情况下运行时,玩家将通过几帧动画然后游戏完全冻结,我什至无法移动玩家。
func _on_Area2D_body_entered(body):
get_tree().reload_current_scene()
如果我删除此代码,或将监控设置为关闭,然后重新运行游戏,它不会冻结。
下面是我的关卡设计截图。
任何帮助将不胜感激:) - 这是一个错误还是我在做一些愚蠢的事情?
当我在 get_tree().reload_current_scene() 行设置断点时,以下报告显示
这是否意味着玩家正在与瓷砖碰撞 - 如果是这种情况,我看不出程序在玩家接触地面之前是如何冻结的。
【问题讨论】:
-
尝试在
get_tree().reload_current_scene()行设置断点并单步执行您的代码。看看有没有像无限循环这样的问题。 -
想到的事情:1.自动加载导致无限循环,您可以尝试按照hola建议的方式进行步进。 2. 无法重新加载的资源(例如音乐,或其他需要在开始时加载的东西),您可以尝试在没有任何可疑资源的情况下运行。同样
reload_current_scene返回一个值,打印它,它可能会给我们一个线索。如果你去 Editor -> Open Editor Data/Settings Folder,Godot 应该打开一个文件夹,查看那里的 app_userdata 文件夹,然后是一个与你的项目名称匹配的文件夹。您可以在那里找到日志,这也可以提供有关正在发生的事情的线索。 -
“这是否意味着玩家正在与瓷砖碰撞 - 如果是这种情况,我看不出程序在玩家接触地面之前是如何冻结的。”对于碰撞调试问题,您可以在调试菜单中启用可见碰撞形状,这将在调试时将它们显示在游戏中。您还可以转到“场景”面板上的“远程”选项卡来查看调试暂停时(例如在断点上)的节点状态。
-
@Theraot 我尝试在该行上添加一个断点并单步执行。我得到了我在上面的原始帖子中编辑的报告 - 这是否表明瓷砖地图和玩家之间存在碰撞?至于像你建议的Theroat那样打印语句,0是连续输出的。我相信你可以告诉我我是游戏开发的新手(这是一个学校项目),非常感谢你们的帮助。