cocos2dx 精灵增加触摸事件

  cocos2dx  给精灵实现一个触摸事件方法:

 

   让精灵类继承CCsprite和CCTargetedTouchDelegate两个类,然后实现CCTargetedTouchDelegate的几个虚函数如下:

 

   virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
 
     // optional
    virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
    virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);

  

    给精灵增加触摸事件的方式:

     1.在精灵类初始化的时候调用

     2.在进入场景的时候调用,如果在进入场景的时候调用,则需要精灵类需要实现两外的两个方法

         virtual void onEnter();//进入时注册
         virtual void onExit();//出场景时删除

 

    注册方法:

        void SelfCard::onEnter()
        {
            CCLog("sprite enter scene");
            CCSprite::onEnter();
            CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-127,true);

            //这一步是关键
        }

      

        现在问题来了 通过以上方法加入到触摸事件的时候,不知道是不是全局的触摸事件,只要触摸然后精灵类就有会有反应,按我的理解就是我在精灵类上注册了触摸事件,那我触摸这个精灵的时候,才会有触摸相应的,但是实际中不是,所以我的理解就是   CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-127,true);

  这个方法是所有的触摸事件的集合,只要有触摸的事件,就会相应所有被注册的事件,所以在每个触摸的事件里面自己要单独处理有没有被触摸到:

 

   /*触摸开始*/

   bool SelfCard::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent){

    CCPoint point=pTouch->getLocation();

    if(!isTouch(point))
        return false;

    CCSprite *prite = CCSprite::create("dong.png");

    prite->setPosition(ccp(this->getPositionX(),this->getPositionY()+50));

    this->getParent()->addChild(prite,0,1001);
    this->setVisible(false);
    return true;
}

/*判断是否被触摸到*/

bool SelfCard::isTouch(CCPoint point)
{
    CCPoint nodePoint=this->convertToNodeSpace(point);
    CCSize size=this->getContentSize();

    if(nodePoint.x>size.width ||nodePoint.x<0 ||nodePoint.y>size.height ||nodePoint.y<0 )
        return false;

    return true;
}

   

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值