void HFViewport::scrollBy(const CCPoint& targetPoint, CCCallFunc* callbackFunc,float time) { unscheduleAll(); mIsProcessingScroll = true; do { this->mTouchMode = TouchMode_Fling; CCPoint curPos = this->m_TargetNode->getPosition(); CCPoint targetPos = ccpSub(curPos,targetPoint); CCSize winsize = CCDirector::sharedDirector()->getWinSize(); if (targetPos.x >0.0f) { targetPos.x = curPos.x; } if (targetPos.x <winsize.width-MAP_WIDTH*this->m_TargetNode->getScaleX()){ targetPos.x = winsize.width-MAP_WIDTH*this->m_TargetNode->getScaleX(); } if (targetPos.y >0.0f) { targetPos.y = curPos.y; } if (targetPos.y <winsize.height-MAP_HEIGHT*this->m_TargetNode->getScaleY()){ targetPos.y =winsize.height-MAP_HEIGHT*this->m_TargetNode->getScaleY(); } if(time <0.0f) { this->m_TargetNode->setPosition(targetPos); return; } CCMoveBy* moveTo = CCMoveBy::create(time, targetPos); CCEaseOut* ease = CCEaseOut::create(moveTo, 3); ease->setTag(FLINGACTION_TAG); this->m_TargetNode->runAction(CCRepeat::create(CCSequence::create(ease, callbackFunc, NULL), 1)); this->mTouchMode = TouchMode_Fling; } while(0); mIsProcessingScroll = false; }