(GDScript)尝试将球传送回屏幕中间或queue_free()当前球并创建它的新实例



该游戏是一种头部足球游戏,玩家必须尝试在对手身上得分。敌人AI的工作原理是让球的矢量位置成为一个全局变量,这样敌人就总是能够访问球的位置,以便追逐它。我遇到的问题是,当创建一个新的球实例时,它创建了一个全新的节点,它不会将其位置提供给敌人读取的全局变量,这意味着敌人不会跟随新球。

我的另一个选择是传送原来的球回到屏幕的中间,但因为它是一个RigidBody2D,传送功能不一样。我不知道怎么把球放在屏幕中央。

本质上,当球进入球门时,我希望RigidBody2D Soccer ball传送到屏幕中间。如果有人能做到这一点,或者知道任何可以帮助我实现目标的事情,那就太棒了。在我的编程课上,我已经被这个问题困了一个星期了,不知道如何解决它。

谢谢!

该游戏是一种头部足球游戏,玩家必须尝试在对手身上得分。敌人AI的工作原理是让球的矢量位置成为一个全局变量,这样敌人就总是能够访问球的位置,以便追逐它。我遇到的问题是,当创建一个新的球实例时,它创建了一个全新的节点,它不会将其位置提供给敌人读取的全局变量,这意味着敌人不会跟随新球。

我理解这一点的唯一方法是您正在使用未连接到新Node的信号。如果是这样的话,你可以从代码中连接信号。

但是,我建议使用自动加载来存储位置,然后每个人都应该能够读取或写入它。


我的另一个选择是传送原来的球回到屏幕的中间,但因为它是一个RigidBody2D,传送功能不一样。我不知道怎么把球放在屏幕中央。

我已经在另一个答案中涵盖了难以捉摸的RigidBody2D传送。我建议在Godot 3.x中这样做:

Physics2DServer.body_set_state(
get_rid(),
Physics2DServer.BODY_STATE_TRANSFORM,
Transform2D.IDENTITY.translated(Vector2(512, 300))
)

另一种选择是使用_integrate_forces,您可以在链接中找到。

在Godot 4中工作并不难:

PhysicsServer2D.body_set_state(
get_rid(),
PhysicsServer2D.BODY_STATE_TRANSFORM,
Transform2D.IDENTITY.translated(Vector2(512, 300))
)

最新更新