该游戏是一种头部足球游戏,玩家必须尝试在对手身上得分。敌人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))
)