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

Cocos2d-x调用setFlippedX(true)后动画未水平翻转问题咨询

问题分析与解决方案

你遇到的问题核心是Cocos2d-x的Animate动作会在每帧播放时重置精灵的翻转状态,导致你提前设置的setFlippedX(true)被覆盖,看起来像是没有生效。

为什么会出现这种情况?

在Cocos2d-x中,AnimationFrame默认会使用精灵帧(SpriteFrame)的原始变换属性(包括翻转状态)来渲染每帧。当你启动Animate动作后,每帧动画都会把精灵的flipX重置为精灵帧的默认值(也就是朝右的初始状态),所以你之前调用的setFlippedX(true)会被直接冲掉。

具体解决方法

你需要让每帧动画都继承并应用你想要的翻转状态,最简单的方式是在创建AnimationFrame时,把翻转信息加入到userInfo字典中:

修改你代码中的循环部分:

for (int i =0; i<3;i++){
    auto frameName = frameNames.at(i);
    auto spriteFrame = SpriteFrameCache::getInstance()->getSpriteFrameByName(frameName);
    ValueMap userInfo;
    userInfo["frame_index"] = Value(i);
    userInfo["flipX"] = Value(true); // 新增这一行,强制每帧应用X轴翻转
    auto animFrame = AnimationFrame::create(spriteFrame, frameRate, userInfo);
    animFrames.pushBack(animFrame);
}

这样每帧动画播放时,都会读取userInfo里的flipX设置,保持角色朝左的状态,不会再被精灵帧的默认值覆盖。

另外,你代码里两次调用了p->setFlippedX(true),其实保留一次就足够了,不过这不是问题的核心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:22:16