#include "RUQCoreBtn.h" NS_RU_BEGIN QCoreBtn * QCoreBtn::Layer(string file) { auto *lib = redream::NodeLoaderLibrary::newDefaultNodeLoaderLibrary(); lib->registerNodeLoader("QCoreBtn",QCoreBtnLoader::loader()); redream::REDReader *reader = new redream::REDReader(lib); reader->autorelease(); QCoreBtn * node = (QCoreBtn*)reader->readNodeGraphFromFile(file.c_str()); node->setAnimManager(reader->getAnimationManagers()); return node; } Control::Handler QCoreBtn::onResolveREDCCControlSelector(Ref * pTarget, const char * pSelectorName) { RED_SELECTORRESOLVER_CCCONTROL_GLUE(this, "OnClickCCBButton", QCoreBtn::OnClickCCBButton); return nullptr; } void QCoreBtn::onNodeLoaded(cocos2d::Node * node, redream::NodeLoader * nodeLoader) { _bCanClickButton=true; _tapTL = "tap"; _releaseTL = "release"; QCoreLayer::onNodeLoaded(node, nodeLoader); } void QCoreBtn::OnClickCCBButton(cocos2d::Ref *sender, cocos2d::extension::Control::EventType pControlEvent) { ControlButton* mSender = (ControlButton*)sender; _mClickButtonTag = mSender->getTag(); if(!_bCanClickButton) return; auto playAnimateTap = [this]{ _isPlayRelease = false; this->playAnim(_tapTL); }; auto playAmimateRelease = [this]{ if (!_isPlayRelease) { _isPlayRelease = true; this->playAnim(_releaseTL); } }; auto playAmimateReleaseTap = [this]{ if (!_isPlayRelease) { _isPlayRelease = true; this->playAnim("tap copy"); } }; if (pControlEvent == cocos2d::extension::Control::EventType::TOUCH_DOWN) { playAnimateTap(); _lastWorldPos = convertToWorldSpace(Vec2(0,0)); }else if (pControlEvent == cocos2d::extension::Control::EventType::TOUCH_UP_INSIDE){ playAmimateRelease(); auto nowWorldPos = convertToWorldSpace(Vec2(0,0)); if (abs(nowWorldPos.x - _lastWorldPos.x) <= 50 && abs(nowWorldPos.y - _lastWorldPos.y) <= 50 ) { _bCanClickButton = false; if (_playEffect) { // if (getTag() == 3) { // CtlAudioMgr::getInstance()->playEffect(AUDIO_LYSETTING_CLOSE_CLICK); // }else if(getTag() == 4){ // CtlAudioMgr::getInstance()->playEffect(AUDIO_EFX_GAME_BUTTON_CLICK); // }else{ // CtlAudioMgr::getInstance()->playEffect(AUDIO_EFX_WINDOW_PLAY); // } } scheduleOnce(schedule_selector(QCoreBtn::clickBtnSechel),0.02f); } }else if (pControlEvent == cocos2d::extension::Control::EventType::DRAG_EXIT){ //这种情况下不能执行playAmimateRelease 否则btn状态与需求不符 }else if (pControlEvent == cocos2d::extension::Control::EventType::TOUCH_UP_OUTSIDE){ auto tTime = this->getAnimTime("tap copy"); if (tTime) { playAmimateReleaseTap(); }else{ playAmimateRelease(); } }else{ playAmimateRelease(); } } void QCoreBtn::clickBtnSechel(float t) { if(coreClickButton != nullptr) { coreClickButton(this,_mClickButtonTag); } } void QCoreBtn::clScheduOnce(float dt) { scheduleOnce([this](float dt){ if(coreClickButton != nullptr) { this->coreClickButton(this,-1); } }, dt, "scheduOnce"); } void QCoreBtn::ResetButton() { _bCanClickButton = true; } void QCoreBtn::setTouchEnable(bool enable){ if (enable) { _bCanClickButton = true; }else{ _bCanClickButton = false; } } void QCoreBtn::resetParticle(std::string name) { ParticleSystemQuad* ps = getParticle(name); if (ps != nullptr) { ps->resetSystem(); } } void QCoreBtn::setTimelines(const char* tl4Tap, const char* tl4Release) { _tapTL = tl4Tap; _releaseTL = tl4Release; } void QCoreBtn::ingroPlayEffect(){ _playEffect = false; } QCoreBtn::QCoreBtn() { _playEffect = true; _isPlayRelease = true; } QCoreBtn::~QCoreBtn() { } NS_RU_END