Godot Python中多RigidBody2D使用move_and_slide的移动冲突问题求助
问题解决:Godot Python中RigidBody2D速度互相干扰的问题
核心原因
你遇到的问题大概率是速度变量作用域错误,或者脚本挂载对象混乱,导致所有RigidBody2D共享了同一个速度值。
分步解决
确保速度是节点局部变量
不要在脚本全局区域(类定义外)定义velocity,必须把它作为每个节点实例的属性。比如玩家和球的脚本里,都用self.velocity来存储自身的速度,绝对不能用全局共享的变量。严格区分脚本挂载对象
玩家节点只挂载玩家控制脚本,球节点只挂载随机移动脚本,不要重复挂载或挂错节点。两个脚本都要继承RigidBody2D,但各自只负责对应节点的逻辑。正确的代码示例
玩家控制脚本:extends RigidBody2D func _physics_process(delta): # 只处理玩家的输入移动 var input_y = Input.get_axis("ui_up", "ui_down") self.velocity = Vector2(0, input_y * 200) move_and_slide(self.velocity)球的随机移动脚本:
extends RigidBody2D func _ready(): # 初始化球的随机方向速度 self.velocity = Vector2(rand_range(-100, 100), rand_range(-100, 100)).normalized() * 150 func _physics_process(delta): move_and_slide(self.velocity)额外排查点
- 检查有没有用
get_nodes_in_group这类方法批量修改所有刚体速度,如果有,给玩家和球设置不同的分组,只操作对应组的节点。 - 确认信号连接没有错误,比如不要把球的速度更新信号连到玩家节点上。
- 检查有没有用
内容的提问来源于stack exchange,提问作者Difio
相关产品推荐
相关产品推荐

