Sprite水平移动转向时出现永久挤压问题 相关代码故障排查
问题根源
你遇到的Sprite挤压问题是因为image_xscale的赋值逻辑直接覆盖了原有缩放系数:
- 如果你在对象编辑器里手动调整过对象的初始水平缩放,或者在其他代码逻辑中修改过
image_xscale的数值(比如为了适配场景大小把初始缩放设为0.8、2等值),直接赋值sign(hsp)会把image_xscale强制设为1或-1,直接冲掉了原有的缩放比例,就会出现Sprite被挤压/拉伸的视觉效果。 - 同时如果你的多个Sprite素材(站立态
s_player、跑步态splayerR、空中态splayerA)的原始尺寸不一致,也可能在切换Sprite时出现类似挤压的视觉误差,但核心问题还是出在缩放赋值逻辑上。
修复方案
把引发问题的那行代码替换为以下内容即可,既保留转向功能,又不会破坏原有缩放比例:
if (hsp != 0) image_xscale = abs(image_xscale) * sign(hsp);
逻辑说明:
- 用
abs(image_xscale)先获取当前Sprite的正常水平缩放数值,保留原始缩放大小 - 乘以
sign(hsp)只修改缩放的正负符号,实现水平翻转转向的效果 - 如果你的项目中也用到了垂直翻转的逻辑,同理修改
image_yscale时也可以用相同的逻辑处理
额外排查点
如果修改后还有异常,可以检查两个配置:
- 确认所有用到的Sprite素材的原点都设置为同一个位置(比如统一设为底部中心),避免切换Sprite时出现位置偏移看起来像挤压
- 确认对象的初始
image_yscale没有被修改为和image_xscale不一致的数值,避免横竖缩放比例失衡导致变形
内容的提问来源于stack exchange,提问作者Hephzi Wilson
相关产品推荐
相关产品推荐

