Почему анимация не переворачивается горизонтально, когда я вызываю setFlipped (true)? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть несколько спрайтов, где персонаж игрока направлен вправо.Я могу создать анимацию из этих спрайтов просто отлично.Проблема в том, что если я хочу, чтобы спрайты были повернуты влево.

Я делаю следующее:

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.Я не могу найти ошибку, поэтому я предполагаю, что я делаю что-то неправильно.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Похоже, что это ошибка, и, похоже, нет способа обойти эту проблему, за исключением использования двух наборов спрайтов - один для всех спрайтов без переворачивания, а другой набор для переворачивания спрайтов.

Что еще хуже - это означает, что вы не можете использовать код анимации, если хотите переворачивать, и вместо этого вам нужно реализовать собственную логику, использовать соответствующий набор спрайтов, анимаций и т. Д.

РЕДАКТИРОВАТЬ: кажется, исправлено в 3,16

0 голосов
/ 25 мая 2018

Это потому, что вы дважды вызываете это в своем коде,

p->setFlippedX(true);
...