2015-05-08 5 views
1

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

auto animateTo=ActionTween::create(.4, "roll", 0.f, M_PI_2); 
auto animateFrom=ActionTween::create(.4, "roll", M_PI_2, M_PI); 
auto seq=Sequence::create(animateTo,animateFrom, NULL); 
coin->runAction(seq); 

Я реализовал ActionTweenDelegate тоже как

class GameScene : Base, public ActionTweenDelegate 

и реализованы метод

void updateTweenAction(float value, const std::string& key); 

Но каждый раз, когда я получаю

Ошибочная: цель должна реализовать ActionTweenDelegate Assertion не удалось: (dynamic_cast (цель)), функция startWithTarget

Я попытался установить startTarget а также

animateTo->setOriginalTarget(this); 
animateFrom->setOriginalTarget(this); 

Но не повезло, ничто не работает, он каждый раз падает.

Пожалуйста, если кто-то испытал то же самое, помогите.

Спасибо.

ответ

2

сделать это:

Наследование ActionTweenDelegate (Протокол ActionTween), чтобы класс спрайта, на котором вы хотите выполнить ActionTween.

также написать

void updateTweenAction(float value, const std::string& key); 

метод в .h & .cpp файл вашего класса.

После запуска ActionTween обновляет свойство ключа спрайта со значением;

Пример:

MySprite *sprite = MySprite::create(); 
sprite->runAction(ActionTween::create(1.0, "scaleX", 1.0, 0.0)) 

и MySprite.cpp

void updateTweenAction(float value, const std::string& key) { 
    this->setScaleX(value); 
} 

убедитесь, что ключ "Scalex" в анимации конструктору и обратного вызова должны быть одинаковыми.