cocos2d-x: вращение CCSprite во время движения меняет его конечную позицию

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

Я создал две последовательности действий, одну для перемещения, а другую для вращения, и соединил их в пешке CCS. Если я выполняю только движущееся действие, оно работает нормально, но когда действия выполняются вместе, в конце спрайт возвращается в исходное положение.

Я понятия не имею, что происходит. Ребята, вы можете помочь?

CCLayer * gameLayer = CCLayer::create();

Ant* ant = Ant::create(); // Ant is a CCSprite

CCPoint nestp = ccp(45, 172);

ant->setPosition(nestp);

gameLayer->addChild(ant);

addChild(gameLayer);

    // ant walking animation
CCAnimate * antWalk = CCAnimate::create(_antWalk);
ant->runAction(CCRepeatForever::create(antWalk));   

CCPoint p1 = ccp(55, 165), p2 = ccp(75,160), p3 = ccp(90,110), p4 = ccp(105, 50);   

CCSequence *moveOut = (CCSequence *)CCSequence::create(CCMoveTo::create(0.3, p1), CCMoveTo::create(0.3, p2), CCMoveTo::create(0.7, p3), CCMoveTo::create(0.7, p4), NULL);

CCSequence *rotateOut = (CCSequence *) CCSequence::create(CCRotateTo::create(0.5, 50), CCDelayTime::create(1), CCRotateTo::create(0.5, 0));

CCSpawn *leaveNest = (CCSpawn *)CCSpawn::create(moveOut, rotateOut, NULL);

ant->runAction(leaveNest);

1 ответ

Решение

Рассматривая свой вопрос, я понял, что забыл добавить NULL в конец вращающейся последовательности. Должно быть так:

CCSequence *rotateOut = (CCSequence *) CCSequence::create(CCRotateTo::create(0.5, 50), CCDelayTime::create(1), CCRotateTo::create(0.5, 0), NULL);

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

Другие вопросы по тегам