cocos2dx 多点触摸

1:在.h文件中 重写多触点回调函数

//重写多触点回调函数

    virtual void registerWithTouchDispatcher(void);

    virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);

    virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);

    virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);

2:在cpp的init()方法中开启多点触摸

bool HelloWorld::init()

{

    if ( !CCLayer::init() )

    {

        return false;

    }

    //开启多触点监听务必调用此函数

    setTouchEnabled(true);

    

    CCSprite * sp1 = CCSprite::create("Icon.png");

    sp1->setColor(ccc3(2552550));//便于区分

    CCSprite * sp2 = CCSprite::create("Icon.png"); 

    sp1->setPosition(ccp(150,100));

    sp2->setPosition(ccp(150,200)); 

    addChild(sp1,0,91);

    addChild(sp2,0,92);

    

    return true;

}

3:重写多点触摸的回调函数

1:先注册

//注册多触点的委托监听()

void HelloWorld::registerWithTouchDispatcher(void){

    CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this0);

}

2:注意,必须在场景切换的时候释放注册

//删除多触点的委托监听

void HelloWorld::onExit(){

    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);

    CCLayer::onExit();

}

3:各种触摸事件

//用户手指第一次触碰

void HelloWorld::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent){

    CCSetIterator iter = pTouches->begin();

    for (; iter != pTouches->end(); iter++)

    {

        CCTouch* pTouch = (CCTouch*)(*iter);

        CCPoint location = pTouch->getLocation();

        if(pTouch->getID()==0){//第一个触点

            CCSprite * sp1 = (CCSprite*)this->getChildByTag(91);

            sp1->setPosition(location);            

        }else if(pTouch->getID()==1){//第二个触点

            CCSprite * sp2= (CCSprite*)this->getChildByTag(92);

            sp2->setPosition(location);

        }

    }

}

//用户手指进行移动或者拖拽

void HelloWorld::ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent){

    CCSetIterator iter = pTouches->begin();

    for (; iter != pTouches->end(); iter++)

    {

        CCTouch* pTouch = (CCTouch*)(*iter);

        CCPoint location = pTouch->getLocation();

        if(pTouch->getID()==0){//第一个触点

            CCSprite * sp1 = (CCSprite*)this->getChildByTag(91);

            sp1->setPosition(location);

        }else if(pTouch->getID()==1){//第二个触点

            CCSprite * sp2= (CCSprite*)this->getChildByTag(92);

            sp2->setPosition(location);

        }

    }

}

//用户手指抬起

void HelloWorld::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent){

    CCSetIterator iter = pTouches->begin();

    for (; iter != pTouches->end(); iter++)

    {

        CCTouch* pTouch = (CCTouch*)(*iter);

        CCPoint location = pTouch->getLocation();

         CCLOG("pTouch  触摸点 %i 的坐标: x:%f,y:%f",pTouch->getID(),location.x,location.y);

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值