【问题标题】:Why isn't an animation flipped horizontally when I call setFlipped(true)?为什么调用 setFlipped(true) 时动画没有水平翻转?
【发布时间】:2018-11-01 00:33:29
【问题描述】:

我有一些精灵,其中玩家角色面向右侧。 我可以从这些精灵创建一个动画就好了。问题是,如果我想让精灵面向左侧。

我执行以下操作:

Sprite* p = Sprite::createWithSpriteFrameName("Jumping");
p->setPosition(Vec2(_visibleSize.width/2,_visibleSize.height/2));
this->addChild(p);
p->setFlippedX(true);
Vector<AnimationFrame*> animFrames;
float frameRate = 0.32f;
std::vector<std::string> frameNames = {"Running 0","Running 1","Running 2"};

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);
    auto animFrame = AnimationFrame::create(spriteFrame, frameRate, userInfo);
    animFrames.pushBack(animFrame);
}

auto animation = Animation::create(animFrames, frameRate);
auto animationAction = Animate::create(animation);
p->runAction(RepeatForever::create(animationAction));
p->setFlippedX(true);

动画运行,但动画仍然显示玩家面向右侧。 有什么问题?为什么setFlippedX 在这种情况下不起作用?

我使用的是 Cocos2d-x 3.13.1。我找不到任何错误,所以我认为我做错了什么。

【问题讨论】:

    标签: cocos2d-x cocos2d-x-3.0 cocos2d-x-3.x


    【解决方案1】:

    这似乎是一个错误,似乎没有办法解决,除了使用两个精灵集 - 一个用于所有不翻转的精灵,另一个用于精灵翻转时的设置。

    更糟糕的是 - 这意味着如果你想翻转,你不能使用动画代码,而是需要实现你自己的逻辑,使用适当的精灵、动画等。

    编辑:它似乎已在 3.16 中修复

    【讨论】:

      【解决方案2】:

      这是因为您在代码上调用了两次,

      p->setFlippedX(true);
      

      【讨论】:

      • 两次我都称它为“真实”,所以它应该没有任何区别。
      • 您可以尝试添加其他变换,例如缩放或旋转。只是为了看到图像可以播放。你也可以尝试在其他平台上运行,看看它不是一个错误。
      • RotateBy 和 ScaleBy 按预期工作。同样,如果我不对图像设置动画,setFlipped 也会对它进行处理。我想问题是:如果你有 cocos2d-x v 3.13.1,并且你运行上面的代码,你能运行一个水平翻转精灵的动画吗?如果是这样,我能看看你的项目和我的项目有什么不同吗?
      • 另外,setFlippedY 有效吗?还有调用 setFlippedX 和 setFlippedY 后的值是多少?
      • 抱歉,我的机器上没有 v3.13。
      猜你喜欢
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多