RUQCoreBtn.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #include "RUQCoreBtn.h"
  2. NS_RU_BEGIN
  3. QCoreBtn * QCoreBtn::Layer(string file)
  4. {
  5. auto *lib = redream::NodeLoaderLibrary::newDefaultNodeLoaderLibrary();
  6. lib->registerNodeLoader("QCoreBtn",QCoreBtnLoader::loader());
  7. redream::REDReader *reader = new redream::REDReader(lib);
  8. reader->autorelease();
  9. QCoreBtn * node = (QCoreBtn*)reader->readNodeGraphFromFile(file.c_str());
  10. node->setAnimManager(reader->getAnimationManagers());
  11. return node;
  12. }
  13. Control::Handler QCoreBtn::onResolveREDCCControlSelector(Ref * pTarget, const char * pSelectorName) {
  14. RED_SELECTORRESOLVER_CCCONTROL_GLUE(this, "OnClickCCBButton", QCoreBtn::OnClickCCBButton);
  15. return nullptr;
  16. }
  17. void QCoreBtn::onNodeLoaded(cocos2d::Node * node, redream::NodeLoader * nodeLoader) {
  18. _bCanClickButton=true;
  19. _tapTL = "tap";
  20. _releaseTL = "release";
  21. QCoreLayer::onNodeLoaded(node, nodeLoader);
  22. }
  23. void QCoreBtn::OnClickCCBButton(cocos2d::Ref *sender, cocos2d::extension::Control::EventType pControlEvent)
  24. {
  25. ControlButton* mSender = (ControlButton*)sender;
  26. _mClickButtonTag = mSender->getTag();
  27. if(!_bCanClickButton) return;
  28. auto playAnimateTap = [this]{
  29. _isPlayRelease = false;
  30. this->playAnim(_tapTL);
  31. };
  32. auto playAmimateRelease = [this]{
  33. if (!_isPlayRelease) {
  34. _isPlayRelease = true;
  35. this->playAnim(_releaseTL);
  36. }
  37. };
  38. auto playAmimateReleaseTap = [this]{
  39. if (!_isPlayRelease) {
  40. _isPlayRelease = true;
  41. this->playAnim("tap copy");
  42. }
  43. };
  44. if (pControlEvent == cocos2d::extension::Control::EventType::TOUCH_DOWN) {
  45. playAnimateTap();
  46. _lastWorldPos = convertToWorldSpace(Vec2(0,0));
  47. }else if (pControlEvent == cocos2d::extension::Control::EventType::TOUCH_UP_INSIDE){
  48. playAmimateRelease();
  49. auto nowWorldPos = convertToWorldSpace(Vec2(0,0));
  50. if (abs(nowWorldPos.x - _lastWorldPos.x) <= 50 && abs(nowWorldPos.y - _lastWorldPos.y) <= 50 ) {
  51. _bCanClickButton = false;
  52. if (_playEffect) {
  53. // if (getTag() == 3) {
  54. // CtlAudioMgr::getInstance()->playEffect(AUDIO_LYSETTING_CLOSE_CLICK);
  55. // }else if(getTag() == 4){
  56. // CtlAudioMgr::getInstance()->playEffect(AUDIO_EFX_GAME_BUTTON_CLICK);
  57. // }else{
  58. // CtlAudioMgr::getInstance()->playEffect(AUDIO_EFX_WINDOW_PLAY);
  59. // }
  60. }
  61. scheduleOnce(schedule_selector(QCoreBtn::clickBtnSechel),0.02f);
  62. }
  63. }else if (pControlEvent == cocos2d::extension::Control::EventType::DRAG_EXIT){
  64. //这种情况下不能执行playAmimateRelease 否则btn状态与需求不符
  65. }else if (pControlEvent == cocos2d::extension::Control::EventType::TOUCH_UP_OUTSIDE){
  66. auto tTime = this->getAnimTime("tap copy");
  67. if (tTime) {
  68. playAmimateReleaseTap();
  69. }else{
  70. playAmimateRelease();
  71. }
  72. }else{
  73. playAmimateRelease();
  74. }
  75. }
  76. void QCoreBtn::clickBtnSechel(float t)
  77. {
  78. if(coreClickButton != nullptr)
  79. {
  80. coreClickButton(this,_mClickButtonTag);
  81. }
  82. }
  83. void QCoreBtn::clScheduOnce(float dt)
  84. {
  85. scheduleOnce([this](float dt){
  86. if(coreClickButton != nullptr)
  87. {
  88. this->coreClickButton(this,-1);
  89. }
  90. }, dt, "scheduOnce");
  91. }
  92. void QCoreBtn::ResetButton()
  93. {
  94. _bCanClickButton = true;
  95. }
  96. void QCoreBtn::setTouchEnable(bool enable){
  97. if (enable) {
  98. _bCanClickButton = true;
  99. }else{
  100. _bCanClickButton = false;
  101. }
  102. }
  103. void QCoreBtn::resetParticle(std::string name)
  104. {
  105. ParticleSystemQuad* ps = getParticle(name);
  106. if (ps != nullptr) {
  107. ps->resetSystem();
  108. }
  109. }
  110. void QCoreBtn::setTimelines(const char* tl4Tap, const char* tl4Release) {
  111. _tapTL = tl4Tap;
  112. _releaseTL = tl4Release;
  113. }
  114. void QCoreBtn::ingroPlayEffect(){
  115. _playEffect = false;
  116. }
  117. QCoreBtn::QCoreBtn()
  118. {
  119. _playEffect = true;
  120. _isPlayRelease = true;
  121. }
  122. QCoreBtn::~QCoreBtn()
  123. {
  124. }
  125. NS_RU_END