cocos2d-x注册touch事件

cocos2d-x注册touch事件


          之前在写cocos2d项目时,一般注册touch事件都是在init()方法中或onEnter()方法中,例如:

bool GameLayer::init(){
    if (!CCLayer::init()) {
        return false;
    }
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
    return true;
}

void GameLayer::onEnter(){
   
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
ccNode::onEnter();
}
然后在onExit();方法中取消touch事件的注册,像
void GameLayer::onExit(){
   
    CCDirector::sharedDirector()->getTouchDispatcher()->getTouchDispatcher()- >removeDelegate(this);
ccNode::onExit();
}
其实,在cocos2d的api中还有比这简便的方法来节省代码和增强代码的阅读性,在继承cclayer时,父类有一个
registerWithTouchDispatcher()方法,在onEnter方法中被调用,所以在我们继承父类时,重写registerWithT ouchDispatcher()方法即可,在registerWithTouchDispatcher()方法中注册touch事件

void GameLayer::registerWithTouchDispatcher(){

    CCLOG("registerWithTouchDispatcher");

    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);

}

这样在你退出的时候不用再去写取消touch事件的方法,父类会在onExit方法中帮你注销。


当然这样写还要注意的是,必须现在init方法中开启触摸事件,即 this->setTouchEnabled(true);,否则是不会去 自动执行registerWithTouchDispatcher()方法里面的代码的, this->setTouchEnabled(true);方法默认是开启多点 触摸事件,上面写的是注册单点的方法,注册多点的方法是

CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);


好了,这里是我的理解,不对的地方还请指出,大家一起进步!!!


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值