Example #1
0
void HFViewport::doAutoZoom(const CCPoint& curPosition){
    m_doubleClicked = true;
    this->mTouchMode = TouchMode_ZoomFling;
    beginZoom(CCPointMake(curPosition.x - 50, curPosition.y),
              CCPointMake(curPosition.x + 50, curPosition.y));
    m_tAutoZoomDistance = curPosition;
    float curScale = this->m_TargetNode->getScale();
    float resolutionScale = getResolutionRate();
    //zoom
    if(curScale < resolutionScale) {
        //计算指数递减初始值 sum = 1 / (1 - q), q为比值
        m_tAutoZoomDelta = (resolutionScale - curScale) / ((1/(1-ZOOM_DEACCEL_RATE))*0.95);
    }
    else if (curScale > resolutionScale) {
        //计算指数递减初始值 sum = 1 / (1 - q), q为比值
        m_tAutoZoomDelta = (curScale - resolutionScale) / ((1/(1-ZOOM_DEACCEL_RATE))*0.95);
    }
    //scroll
    CCPoint targetPosition = ccp(0, 0);//CCPoint targetPosition = UIUtil::moveToCenterPostion(this->m_TargetNode->convertToNodeSpace(curPosition));
    CCPoint autoCenterDifAll = ccpSub(targetPosition, this->m_TargetNode->getPosition());
    //计算指数递减初始值 sum = 1 / (1 - q), q为比值
    if (mForceStopScroll || !mMovable) {
        m_tAutoZoomDistance = CCPointZero;
    }
    else {
        m_tAutoZoomDistance = autoCenterDifAll / ((1/(1-SCROLL_DEACCEL_RATE))*0.9);
    }
    this->schedule(schedule_selector(HFViewport::zoomInOut));
}
Example #2
0
void EXZoomController::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent){
    
    CCSetIterator iter = pTouches->begin();
    for (; iter != pTouches->end(); iter++){
        CCTouch* pTouch = (CCTouch*)(*iter);
        //        CCPoint location = pTouch->getLocation();
        _touchesDic->setObject(pTouch, CCString::createWithFormat("%d",pTouch->getID())->getCString());
        CCLog("touc id %s,",CCString::createWithFormat("%d",pTouch->getID())->getCString());
    }
	
	bool multitouch = _touchesDic->count() > 1;
	
	if (multitouch){
        //reset history so auto scroll doesn't happen
        _timePointStampCounter = 0;
        
		endScroll(_firstTouch);
        
        CCArray* keys = _touchesDic->allKeys();
        CCTouch *touch1 = (CCTouch*)_touchesDic->objectForKey(((CCString*)keys->objectAtIndex(0))->getCString());
		CCTouch *touch2 = (CCTouch*)_touchesDic->objectForKey(((CCString*)keys->objectAtIndex(1))->getCString());
        
		CCPoint pt = touch1->getLocationInView();
		CCPoint pt2 = touch2->getLocationInView();
        
		beginZoom(pt, pt2);
	} else {
        //record the point for determining velocity
        CCArray* keys = _touchesDic->allKeys();
        //        ((CCString*)keys->objectAtIndex(0))->getCString()
        
        _touchesDic->objectForKey(((CCString*)keys->objectAtIndex(0))->getCString());
        
        CCTouch *touch = (CCTouch*)_touchesDic->objectForKey(((CCString*)keys->objectAtIndex(0))->getCString());
        recordScrollPoint(touch);
		beginScroll(_node->convertToNodeSpace(touch->getLocation()));
    }
	
}
Example #3
0
void HFViewport::onTouchesBegan(const std::vector<Touch*>& pTouches, Event *pEvent)
{
    unscheduleAll();
    CC_ASSERT(this->m_TargetNode);
    
    //tao.yu 为解决batch不跟随自定义摄像机走的问题,增加此行代码
    if (m_TargetNode->getTag() == IMPERIAL_SCENE_TOUCH_LAYER_TAG)
    {
        m_TargetNode->setCameraMask((unsigned short)CameraFlag::USER4, true);
        auto node3d = m_TargetNode->getChildByTag(JUST3D_NODE_TAG);
        if (node3d) {
            node3d->setCameraMask((unsigned short)CameraFlag::USER2, true);
        }
    }
    
//    CC_ASSERT(pTouches);
    
    if (mFingerMap.size() >= 2) {
        isMove = true;
        return;
    }
    
    if( this->mTouchMode == TouchMode_Fling )
    {
        this->m_TargetNode->stopActionByTag(FLINGACTION_TAG);
    }
    this->mTouchMode = TouchMode_None;
    
    
    for ( auto &item: pTouches )
    {
        CCTouch* curTouch = dynamic_cast<CCTouch*>(item);
        CC_ASSERT(curTouch);
        if (mFingerMap.size() <= 2) {
            mFingerMap[curTouch->getID()] = curTouch->getLocation();
        }
    }
//    
//    CCSetIterator iter = pTouches->begin();
//    
//    while( iter != pTouches->end() )
//    {
//        CCTouch* curTouch = dynamic_cast<CCTouch*>(*iter);
//        CC_ASSERT(curTouch);
//        if (mFingerMap.size() <= 2) {
//            mFingerMap[curTouch->getID()] = curTouch->getLocation();
//        }
//        iter++;
//    }
    
    switch(mFingerMap.size())
    {
        case 1:            
        {
            m_bTouchMoved = false;
            if (this->mTouchMode != TouchMode_ZoomFling) {
                this->mTouchMode = TouchMode_Scroll;
            }

            if (!mForceStopScroll && mMovable && !pTouches.empty()) {
                CCTouch* objTouch = dynamic_cast<CCTouch*>(*pTouches.begin());
                CC_ASSERT(objTouch);
                // let "beginScroll" fired by first step scroll , make single touch not fire this
                //                beginScroll(objTouch);
                if (mTouchDelegate) {
                    mTouchDelegate->onSingleTouchBegin(this->m_TargetNode->convertToNodeSpace(objTouch->getLocation()));
                    mTouchDelegate->onSingleTouchBegin(objTouch);
                }
            }
            
            CCTouch* ptouch =getAnyTouchObject(pTouches);
            mPreviewPos = ptouch->getLocation();
        }
            break;
        case 2:
            if (this->mTouchMode != TouchMode_ZoomFling) {
                this->mTouchMode = TouchMode_Zoom;
            }
            if(!allowZoom){
                return;
            }
            do
            {
                FingerMap::iterator iter = mFingerMap.begin();
                CC_BREAK_IF(iter == mFingerMap.end());
                CCPoint pos1 = (*iter).second;
                CC_BREAK_IF(++iter == mFingerMap.end());
                CCPoint pos2 = (*iter).second;
                beginZoom(pos1, pos2);
            }
            while(0);
            isMove = true;
            break;
        default:
            isMove = true;
            CCLOG("begin:Touch not support with %d fingers", pTouches.size());
    }
}
Example #4
0
void Viewport::onTouchesBegan(const std::vector<Touch*>& pTouches, Event *pEvent)
{
    unscheduleAll();
    CC_ASSERT(this->m_TargetNode);
//    CC_ASSERT(pTouches);
    
    if (mFingerMap.size() >= 2) {
        isMove = true;
        return;
    }
    
    if( this->mTouchMode == TouchMode_Fling )
    {
        this->m_TargetNode->stopActionByTag(FLINGACTION_TAG);
    }
    this->mTouchMode = TouchMode_None;
    
    
    for ( auto &item: pTouches )
    {
        Touch* curTouch = dynamic_cast<Touch*>(item);
        CC_ASSERT(curTouch);
        if (mFingerMap.size() <= 2) {
            mFingerMap[curTouch->getID()] = curTouch->getLocation();
        }
    }
    
    switch(mFingerMap.size())
    {
        case 1:            
        {
            m_bTouchMoved = false;
            if (this->mTouchMode != TouchMode_ZoomFling) {
                this->mTouchMode = TouchMode_Scroll;
            }

            if (!mForceStopScroll && mMovable) {
                Touch* objTouch = dynamic_cast<Touch*>(*pTouches.begin());
                CC_ASSERT(objTouch);
                // let "beginScroll" fired by first step scroll , make single touch not fire this
                //                beginScroll(objTouch);
                if (mTouchBeginHandler) {
                    pushValueToLua(mTouchBeginHandler, objTouch);
                }
            }
            
            Touch* ptouch =getAnyTouchObject(pTouches);
            mPreviewPos = ptouch->getLocation();
        }
            break;
        case 2:
            if (this->mTouchMode != TouchMode_ZoomFling) {
                this->mTouchMode = TouchMode_Zoom;
            }
            if(!allowZoom){
                return;
            }
            do
            {
                FingerMap::iterator iter = mFingerMap.begin();
                CC_BREAK_IF(iter == mFingerMap.end());
                Vec2 pos1 = (*iter).second;
                CC_BREAK_IF(++iter == mFingerMap.end());
                Vec2 pos2 = (*iter).second;
                beginZoom(pos1, pos2);
            }
            while(0);
            isMove = true;
            break;
        default:
            isMove = true;
            CCLOG("begin:Touch not support with %lu fingers", pTouches.size());
    }
}