web-dev-qa-db-ja.com

setFlipped(true)を呼び出すと、アニメーションが水平方向に反転しないのはなぜですか?

プレイヤーキャラクターが右を向いているスプライトがいくつかあります。これらのスプライトからアニメーションをうまく作成できます。問題は、スプライトを左に向けたい場合です。

私は次のことをします:

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を使用しています。バグが見つからないので、何か間違ったことをしていると思います。

18
Kaizer Sozay

これはバグのようであり、2つのスプライトセットを使用する以外に回避する方法はないようです。

さらに悪いことに、これは、反転したい場合はアニメーションコードを使用できず、代わりに独自のロジックを実装して、適切なスプライト、アニメーションなどのセットを使用する必要があることを意味します。

編集:3.16で修正されるようです

5
Kaizer Sozay

これは、コードでこれを2回呼び出しているためです。

p->setFlippedX(true);
0
Truth