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

Godot 2D钓鱼游戏右侧生成的鱼镜像、碰撞盒错位如何解决?

问题根源

你的右侧路径是从上到下的竖线,PathFollow2D沿路径移动时的切线方向为向下(对应旋转角度PI/2),你统一给所有鱼的旋转值加了PI/2后,右侧鱼的总旋转角度为PI,也就是整个节点旋转180度。这种旋转不仅会调整鱼的横向朝向,还会导致精灵上下颠倒,碰撞盒也跟着旋转错位。你之前尝试修改scale.y无效,就是因为没有解决旋转角度错误的核心问题。

修复方案

提供两种可直接落地的修改方式,选其中一种即可:

方式1:区分左右侧调整旋转角度

修改你的生成代码,在计算完旋转角度后,对右侧生成的鱼额外减去PI抵消多余的旋转,同时保证移动方向正确:

var fish = Fish.instance()
add_child(fish)
var fishSide
if (side == 0):
    fishSide = $FishPathLeft/FishFollowLeft
else:
    fishSide = $FishPathRight/FishFollowRight
fishSide.offset = randi()
fish.linear_velocity = Vector2(fish.speed, 0)
var direction = fishSide.rotation + PI / 2
# 新增:抵消右侧鱼多余的180度旋转
if side == 1:
    direction -= PI
fish.rotation = direction
fish.position = fishSide.position
fish.linear_velocity = fish.linear_velocity.rotated(direction)

方式2:修改路径点顺序+水平翻转

  1. 把右侧Path2D的点顺序改成从下到上,和左侧路径的点顺序保持一致,这样两侧PathFollow2D的切线方向统一为向上,加PI/2后旋转角度都为0,不会出现旋转180度的问题
  2. 生成右侧鱼时,用flip_h水平翻转精灵保证朝向正确,同时反向速度:
# 原有代码不变,新增以下内容
if side == 1:
    fish.linear_velocity *= -1
    # 如果你的鱼节点的Sprite是子节点,就改成$Sprite.flip_h = true
    fish.flip_h = true

内容的提问来源于stack exchange,提问作者Natalie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:45:01