Godot 3.5中如何实现子弹从玩家位置正确发射?
修复Godot 3.5子弹定位问题
问题根源
你当前代码的核心问题是坐标系不匹配:把子弹添加到玩家的父节点后,直接用玩家节点内部Position2D的局部位置给子弹赋值,但父节点和玩家节点的坐标系不统一,导致子弹被放置在父节点的坐标系原点附近(也就是你看到的画面上方堆叠),而非玩家的实际位置。同时速度计算的坐标系也不一致,会导致子弹飞行方向出错。
修复代码
修改你的shoot()函数为:
func shoot(): var bullet = bulletscene.instance() get_parent().add_child(bullet) # 用Position2D的全局位置设置子弹位置,确保和玩家发射点对齐 bullet.global_position = $Node2D/Position2D.global_position # 计算从发射点指向鼠标的归一化方向,再乘以速度得到正确的飞行向量 var shoot_direction = (get_global_mouse_position() - bullet.global_position).normalized() bullet.velocity = shoot_direction * SHOOT_SPEED
额外说明
- 如果你的
Shoot.tscn中的子弹脚本是通过global_position += velocity * delta来移动的,上面的代码直接可用;如果是用局部位置移动,需要把速度转换成父节点的局部向量:bullet.velocity = get_parent().global_position_to_local(bullet.global_position + shoot_direction * SHOOT_SPEED) - bullet.position,不过更推荐用全局位置处理移动,逻辑更清晰。 - 保留
_process里的$Node2D.look_at(get_global_mouse_position()),它能正确让发射点朝向鼠标。
内容的提问来源于stack exchange,提问作者gheeko dos
相关产品推荐
相关产品推荐

