使用点击拖拽控制时Sprite无法水平翻转的问题求助
问题分析与解决方案
核心问题
- 方向判断逻辑存在隐患:你直接用
mouse_pos < global_position这类整体Vector2比较,Godot中Vector2的大小判断是先比x轴、x相等再比y轴,若鼠标在玩家左右但上下位置差异大,可能出现逻辑偏差(虽当前print输出正常,但判断逻辑不严谨)。 - 动画关键帧覆盖代码设置:既然键盘控制直接设置
flip_h有效,拖拽时无效,大概率是AnimatedSprite的动画中存在flip_h关键帧——动画播放时会强制将flip_h重置为关键帧值,覆盖代码的动态设置。
修复步骤
1. 修正方向判断逻辑(只比较x轴)
将拖拽控制代码中的方向判断部分替换为:
var mouse_pos = get_global_mouse_position() if mouse_pos.x < global_position.x: $AnimatedSprite.set_flip_h(true) print("face left") elif mouse_pos.x > global_position.x: $AnimatedSprite.set_flip_h(false) print("face right")
只基于x轴坐标判断左右,确保方向逻辑精准。
2. 移除动画中的flip_h关键帧
打开AnimatedSprite的动画编辑器:
- 找到
flip_h对应的轨道,若存在关键帧则全部删除; - 确保动画播放时不会强制覆盖
flip_h属性,让代码能动态控制翻转状态。
额外优化(可选)
可以避免重复设置相同的flip_h值,减少不必要的节点调用:
var mouse_pos = get_global_mouse_position() var should_flip_left = mouse_pos.x < global_position.x if $AnimatedSprite.flip_h != should_flip_left: $AnimatedSprite.flip_h = should_flip_left print(should_flip_left ? "face left" : "face right")
内容的提问来源于stack exchange,提问作者Binbows
相关产品推荐
相关产品推荐

