You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:34:58