void MyMenu::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent) { //先检测路径在~调用回调 if (m_pSelectedItem) { //TODO // if (m_pSelectedItem->getTag() == myTiledMenuItemTag) { //点击主建筑时 MyMap* myMap = (MyMap*)map; if (!isActive && isMoved) { //未激活建筑 同时移动地图时,不激活建筑 CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent); CCAssert(m_eState == kCCMenuStateTrackingTouch, "[Menu ccTouchEnded] -- invalid state"); m_pSelectedItem->unselected(); m_eState = kCCMenuStateWaiting; } else if(!isActive && !isMoved) { //未激活建筑时点击建筑时(不移动地图),激活建筑,取消其他建筑 ((MyMap*)map)->cancelAllBuilding(); CCMenu::ccTouchEnded(pTouch, pEvent); } else if(isActive && isMoved) { //激活建筑并拖动建筑 if (myMap->collisionDetection()) { //落点有碰撞,播错误提示并取消 CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent); CCAssert(m_eState == kCCMenuStateTrackingTouch, "[Menu ccTouchEnded] -- invalid state"); CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sfx_error.wav"); m_pSelectedItem->unselected(); m_eState = kCCMenuStateWaiting; } else { //落点无碰撞,放置建筑 cacheLoc = this->getPosition(); CCPoint loc = getPositionByTiled(); MyMenu::reorderZandTouchPriority(999999-this->getPosition().y, kCCMenuHandlerPriority-loc.x-loc.y); ((MyMap*)map)->dispearTip(); CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sfx_place.wav"); CCMenu::ccTouchEnded(pTouch, pEvent); } } else if(isActive && !isMoved) { //建筑激活并且没有移动 if(!myMap->isBuild()) { //不在建筑模式下,取消选择 if (!((MyMap*)map)->collisionDetection()) { //没有在碰撞区,成功取消,并设置Y的位置 ((MyMap*)map)->cancelAllBuilding(); CCPoint loc = getPositionByTiled(); MyMenu::reorderZandTouchPriority(999999-this->getPosition().y, kCCMenuHandlerPriority-loc.x-loc.y); } else { //在碰撞区,播错误声音,不取消 CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sfx_error.wav"); } CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent); CCAssert(m_eState == kCCMenuStateTrackingTouch, "[Menu ccTouchEnded] -- invalid state"); m_pSelectedItem->unselected(); m_eState = kCCMenuStateWaiting; } else { //在建筑模式下, if (!((MyMap*)map)->collisionDetection()) { //没有在碰撞区 CCPoint loc = getPositionByTiled(); MyMenu::reorderZandTouchPriority(999999-this->getPosition().y, kCCMenuHandlerPriority-loc.x-loc.y); CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sfx_place.wav"); CCMenu::ccTouchEnded(pTouch, pEvent); } else { //在碰撞区,播错误声音,不取消 CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sfx_error.wav"); CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent); CCAssert(m_eState == kCCMenuStateTrackingTouch, "[Menu ccTouchEnded] -- invalid state"); m_pSelectedItem->unselected(); m_eState = kCCMenuStateWaiting; } } } } //todo // else { // 点击按键或者其他 CCMenu::ccTouchEnded(pTouch, pEvent); } } else { CCMenu::ccTouchEnded(pTouch, pEvent); } isMoved = false; moveEnabled = false; // ((MyMap*)map)->dispearTip(); // if(m_pSelectedItem && m_pSelectedItem->getTag() != myTiledMenuItemTag && !isMoved) { // CCMenu::ccTouchEnded(pTouch, pEvent); // isMoved = false; // return; // } // if (!isActive && isMoved) { // CC_UNUSED_PARAM(pTouch); // CC_UNUSED_PARAM(pEvent); // CCAssert(m_eState == kCCMenuStateTrackingTouch, "[Menu ccTouchEnded] -- invalid state"); // if (m_pSelectedItem) // { // m_pSelectedItem->unselected(); // } // m_eState = kCCMenuStateWaiting; // moveEnabled = false; // isMoved = false; // return; // } // if(isActive && !isMoved && !((MyMap*)map)->isBuild()) { // if (!((MyMap*)map)->collisionDetection()) { // ((MyMap*)map)->cancelAllBuilding(); // // CCPoint loc = getPositionByTiled(); // MyMenu::reorderZandTouchPriority(999999-this->getPosition().y, kCCMenuHandlerPriority-loc.x-loc.y); // // } else { // CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sfx_error.wav"); // // } // CC_UNUSED_PARAM(pTouch); // CC_UNUSED_PARAM(pEvent); // CCAssert(m_eState == kCCMenuStateTrackingTouch, "[Menu ccTouchEnded] -- invalid state"); // if (m_pSelectedItem) // { // m_pSelectedItem->unselected(); // } // m_eState = kCCMenuStateWaiting; // moveEnabled = false; // isMoved = false; // return; // } // // if (!isActive && !isMoved) { // ((MyMap*)map)->cancelAllBuilding(); // CCMenu::ccTouchEnded(pTouch, pEvent); // return; // } // // if(isActive && moveEnabled && !((MyMap*)map)->collisionDetection()) { // cacheLoc = this->getPosition(); // CCPoint loc = getPositionByTiled(); // MyMenu::reorderZandTouchPriority(999999-this->getPosition().y, kCCMenuHandlerPriority-loc.x-loc.y); // ((MyMap*)map)->dispearTip(); // if(isMoved) { // CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sfx_place.wav"); // } // CCMenu::ccTouchEnded(pTouch, pEvent); // } else { // CC_UNUSED_PARAM(pTouch); // CC_UNUSED_PARAM(pEvent); // CCAssert(m_eState == kCCMenuStateTrackingTouch, "[Menu ccTouchEnded] -- invalid state"); // CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sfx_error.wav"); // if (m_pSelectedItem) // { // m_pSelectedItem->unselected(); // } // m_eState = kCCMenuStateWaiting; // } // ((MyMap*)map)->moveArrowTip(getPositionByTiled(), contentSizeByTiled.width); // moveEnabled = false; // isMoved = false; // CCLog("%f",999999-this->getPosition().y); }