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






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM