为什么不是当我打电话setFlipped(真)的动画水平翻转?

问题描述 投票:15回答:2

我有一些精灵,玩家角色正面右侧。我可以创建一个从那些精灵就好了动画。问题是,如果我想的精灵面对左侧。

我做到以下几点:

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
2个回答
5
投票

这似乎是一个bug,并且似乎没有被解决,短期使用两个精灵集的方式 - 一个用于而不翻转所有的精灵,而另一组当精灵被翻转了。

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

编辑:这似乎是固定在3.16


0
投票

它的,因为你是在你的代码两次调用此,

p->setFlippedX(true);
© www.soinside.com 2019 - 2024. All rights reserved.