перемещение анимированного спрайта вместе с путем в cocos2dx

0

Я хочу переместить анимационный спрайт вместе с путем (я имею в виду std :: vector <cocos2d :: Point> st).

это мой код.

std::vector<cocos2d::Point> st;
Vector< FiniteTimeAction * > fta;
.......
while (!st.empty()) {
    auto des = st.back();
    auto moveAction = MoveTo::create(des.distance(currentPos) / 34, des);
    ...

    auto aniForever = RepeatForever::create(moveAnimation);
    auto seq = Sequence::create(moveAction, CallFunc::create(CC_CALLBACK_0(Barbarian::stopAnimation, this, aniForever)), NULL);
    auto spw = Spawn::create(aniForever, seq, NULL);
    fta.pushBack(spw);

    .....
    st.pop_back();
}

auto seq = Sequence::create(fta);
sprite->runAction(seq);

Таким образом, когда moveAction закончен, он вызовет stopAnimation для остановки aniForever. stopAnimation ниже

void CharacterBase::stopAnimation(cocos2d::RepeatForever *ani) {
CCLOG("STOP ANIMATION");
sprite->stopAction(ani);  }

но я нашел некоторые проблемы с моим кодом. спрайт движется без анимации.

может кто-нибудь сказать мне, почему и найти решение для меня? Спасибо вам всем

  • 0
    spawn лишний, вы можете просто выполнить runAction (aniForever) рядом с run seq. Также опубликуйте код, где вы создаете MoveAnimation.
Теги:
animation
cocos2d-x

1 ответ

1

Код не является полным, но кажется, что вы должны отделить действие анимации и действие движения. Они могут работать одновременно. Попробуйте этот псевдокод:

//when you start moving
auto moveAnimation = createMoveAnimation();
sprite->runAction(moveAnimation);//start play move animation now

Vector< FiniteTimeAction * > fta;
while (!st.empty()) {
    auto des = st.back();
    auto moveAction = MoveTo::create(des.distance(currentPos) / 34, des);
    fta.pushBack(moveAction );
    st.pop_back();
}
auto endAnimation = CallFunc::create(CC_CALLBACK_0(Barbarian::stopAnimation, this, aniForever)//after movement stop movement animation
fta.pushBack(endAnimation);

//so far, you have created a list of moving actions and a stop animation call at the end
auto seq = Sequence::create(fta);
sprite->runAction(seq);//let the sprite move

Ещё вопросы

Сообщество Overcoder
Наверх
Меню