【梦幻连连连】源代码分析(四)-触摸处理

转载请注明出处:http://blog.csdn.net/oyangyufu/article/details/24297597

源代码下载:http://download.csdn.net/detail/oyangyufu/7272177

四、触摸处理ccTouchEnded()流程
1、获取触摸屏幕的坐标转换成地图坐标
2、推断该是否在有效范围、是否为空
3、播放触摸声音
4、依据点击坐标获取精灵、并放大1.3倍
5、依据坐标获取前一个点击的精灵
6、比較这两精灵能否够连接消除
  是。播放消除声音,清除这两坐标node。隐藏这两精灵
  否,缩小前一个精灵,并有抖动动画
7、把当前点击坐标赋值于前一个坐标. (前一坐标初始值(-1, -1))


 

//触摸结束
void MapLayer::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{


    CCPoint location = CCDirector::sharedDirector()->convertToGL(pTouch->getLocationInView()); //获取触摸屏幕的坐标
	location = this->convertToNodeSpace(location);
    
    //location=CCPointMake(location.x, location.y-40);
    
    location=this->pointOfView(location);
    
    
      CCLOG("x:%f",location.x);
      CCLOG("y:%f",location.y);

    if (this->isValiableNode(location)==false)
    {
        return;
    }
    
    if (this->isEmptyNode(location))
    {
        return;
    }

    

    SimpleAudioEngine::sharedEngine()->playEffect("12.wav"); //触摸声音
    
    
    
    if (this->isSamePoints(location, prePoint))
    {
        return;
    }
    
    //点击当前精灵
    CCSprite *spritecurrent=(CCSprite *)this->getChildByTag(TAG_START_SPRITE+this->indexFromPoint(location));
    spritecurrent->setScale(1.3); //放大

    CCLOG("%d",this->indexFromPoint(location));
    
    if (this->isValiableNode(prePoint))
    {
    
        //前一个精灵
         CCSprite *spritepre=(CCSprite *)this->getChildByTag(TAG_START_SPRITE+this->indexFromPoint(prePoint));
        
        if (this->canClearTwo(prePoint, location)) //比較这两精灵能否够连接消除
        {
            
            SimpleAudioEngine::sharedEngine()->playEffect("4.wav");

            this->clearNode(location);
            this->clearNode(prePoint);
            
            
            spritecurrent->setVisible(false);
            spritepre->setVisible(false);
            
            
        }
        else
        {
        
        
            spritepre->setScale(0.9);
            
        
            this->scaleAnimation(spritepre);
        
        }
        
        
        
    }
    
    prePoint=location; //把当前点击坐标赋值于前一个坐标

}


原文地址:https://www.cnblogs.com/zfyouxi/p/5251540.html