cocos2d中的触摸监听

示例代码

  1. 新建场景类继承Scene。
  2. 重载init如下
bool ActionScene::init(){
     // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }
    touchEvent(this);
    return true;
}
  1. 在init前写上全局监听函数(或另建测试类)
void touchEvent(ActionScene *scene){
    //坐标标签
    Label *label=Label::create();
    label->setString("0,0");
    label->setPosition(Point(50,200));
    scene->addChild(label);

    //目标1
    Sprite *sprite1=Sprite::create("sprite1.png");
    sprite1->setPosition(Point(200,200));
    scene->addChild(sprite1);
    //目标2
    Sprite *sprite2=Sprite::create("sprite2.png");
    sprite2->setPosition(Point(200,200));
    scene->addChild(sprite2);

    //设置监听对象
    auto lister=EventListenerTouchOneByOne::create();
    //在回调列表中阻止继续传播
    lister->setSwallowTouches(true);
    //触摸按下
    lister->onTouchBegan=[](Touch *touch,Event *event){
        auto target=static_cast<Sprite*>(event->getCurrentTarget());
        Point pnow= Director::getInstance()->convertToGL(touch->getLocationInView());
        if(target->getBoundingBox().containsPoint(pnow)){
            target->setOpacity(100);
            return true;
        }else{
            return false;
        }
    };
    //触发抬起
    lister->onTouchEnded=[](Touch *touch,Event *event){
        auto target=static_cast<Sprite*>(event->getCurrentTarget());
        Point pnow= Director::getInstance()->convertToGL(touch->getLocationInView());
        target->setOpacity(255);

    };
    //触摸按下移动
    lister->onTouchMoved=[=](Touch *touch,Event *event){
        auto target=static_cast<Sprite*>(event->getCurrentTarget());
        Point pnow= Director::getInstance()->convertToGL(touch->getLocationInView());
        char strshow[1000];
        sprintf(strshow,"(%.2f,%.2f)",pnow.x,pnow.y);
        label->setString(strshow);
    };
    auto eventDisP=Director::getInstance()->getEventDispatcher();
    //绑定目标1
    eventDisP->addEventListenerWithSceneGraphPriority(lister,sprite1);
    //绑定目标2
    eventDisP->addEventListenerWithSceneGraphPriority(lister->clone(),sprite2);
}

该函数实现的是,对某个精灵点击和松开会改变该精灵的透明度。以及在移动鼠标时显示坐标

这里写图片描述

注意处

有界面的框架(如MFC、WinFrom)中都有一套事件监听模块。CC大致与它们相同,略微不同的地方是写法(废话)以及回调类型。在上面定义了三个动作的响应函数(落下,移动,抬起)。在MFC中它们回调函数类型相同,看一下CC中的定义。

这里写图片描述

其中onTouchBegan的返回类型和其它动作的返回类型不同,为bool。

  1. 如果返回true,且其它动作有定义,则会触发执行
  2. 如果返回false,其它定义的动作不会触发

在本例中,如果点击的时候没有点在某个精灵上,那么移动鼠标不会得到鼠标当前的坐标,松开鼠标修改该精灵透明度的代码也不会执行。

*主要内容来自cocos2dx 3.0游戏开发之旅 Section 5.4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值