spine的回调函数

效果都是根据以下测试代码来说的,可能有些不太准确

setStartListener (const StartListener& listener)
StartListener原型

  1. typedef std::function<void(int trackIndex)>StartListener;

效果:如果一个track中有两个以上的动作,那么第二个以后的各个动作开始是会调用StartListener

setEndListener (const EndListener& listener)
EndListener原型

  1. typedef std::function<void(int trackIndex)>EndListener;

效果:如果动画只播放一次,那么播放结束先调用CompleteListener,然后调用EndListener

setCompleteListener (const CompleteListener& listener)
CompleteListener原型

  1. typedef std::function<void(int trackIndex,int loopCount)>CompleteListener;

效果:如果动画循环播放,那么每个循环结束都会调用CompleteListener这个函数

setEventListener(const EventListener& listener)
EventListener原型

  1. typedef std::function<void(int trackIndex, spEvent* event)>EventListener;

效果:这个需要在spine里做动画的时候在某一帧添加event时间,还没有测试,先不多说

setTrackStartListener (spTrackEntry* entry, const StartListener& listener)

setTrackEndListener (spTrackEntry* entry, const EndListener& listener)

setTrackCompleteListener (spTrackEntry* entry, const CompleteListener& listener)

setTrackEventListener (spTrackEntry* entry, const EventListener& listener)

  1. //add a spine animation
  2. auto juese1 =SkeletonAnimation::createWithFile("juese1/juese1.json","juese1/juese1.atlas");
  3. /************************************************************************/
  4. /* 两个都是true,第一个动画播放一次,第二个动画循环播放
  5. /* 第一个true第二个false,两个动画都是只播放一次
  6. /* 两个都是false,两个动画都只播放一次
  7. /* 第一个false第二个true,第一个动画播放一次,第二个动画循环播放
  8. /* 总结:如果有两个动画,不管第一个动画的循环是true还是false,都只播放一次,第二个动画是true就循环是false就不循环
  9. /* 如果有n(n > 2)个动画,那么前(n - 1)个动画的循环是不起作用的都是只播放一次,最后一个动画的循环起作用
  10. /************************************************************************/
  11. juese1->setAnimation(0,"putonggongji",true);
  12. juese1->addAnimation(0,"beiji",true);
  13. juese1->addAnimation(0,"daiji",true);
  14. juese1->setSkin("juese1");
  15. juese1->setScale(0.7f);
  16. juese1->setPosition(Vec2(450,200));
  17. this->addChild(juese1);
  18. juese1->setStartListener([=](int trackIndex){
  19. auto entry = spAnimationState_getCurrent(juese1->getState(), trackIndex);
  20. constchar* animationName =(entry && entry->animation)? entry->animation->name :0;
  21. log("track start: %d, animation name: %s", trackIndex, animationName);
  22. });
  23. juese1->setEndListener([=](int trackIndex){
  24. auto entry = spAnimationState_getCurrent(juese1->getState(), trackIndex);
  25. constchar* animationName =(entry && entry->animation)? entry->animation->name :0;
  26. log("track end: %d, animation name: %s", trackIndex, animationName);
  27. });
  28. juese1->setCompleteListener([=](int trackIndex,int loop){
  29. auto entry = spAnimationState_getCurrent(juese1->getState(), trackIndex);
  30. constchar* animationName =(entry && entry->animation)? entry->animation->name :0;
  31. log("track complete: %d, loop: %d, animation name: %s", trackIndex, loop, animationName);
  32. });

部分log输出

  1. track complete:0, loop:1, animation name: putonggongji
  2. track end:0, animation name: putonggongji
  3. track start:0, animation name: beiji
  4. track complete:0, loop:1, animation name: beiji
  5. track end:0, animation name: beiji
  6. track start:0, animation name: daiji
  7. track complete:0, loop:1, animation name: daiji
  8. track complete:0, loop:2, animation name: daiji
  9. track complete:0, loop:3, animation name: daiji
  10. track complete:0, loop:4, animation name: daiji
  11. track complete:0, loop:5, animation name: daiji
  12. track complete:0, loop:6, animation name: daiji





文章来自:http://www.cnblogs.com/iamxiaolei/p/5666812.html
© 2021 jiaocheng.bubufx.com  联系我们
ICP备案:鲁ICP备09046678号-3