第六节:事件处理

单点触屏事件:

    //先创建一个单点触屏监听器
    auto listener = EventListenerTouchOneByOne::create();
    //注册监听器的回调方法,分别回调本节点的三个方法
    listener->onTouchBegan = CC_CALLBACK_2(EventScene::onTouchBegan, this);
    listener->onTouchEnded = CC_CALLBACK_2(EventScene::onTouchEnded,this);
    listener->onTouchMoved = CC_CALLBACK_2(EventScene::onTouchMoved, this);
    //注册监听器
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

//手势开始的时候执行
bool EventScene::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *unused_event)
{
    //获取屏幕触控点
    auto p = touch->getLocationInView();
    //把点的转换为GL坐标
    p = Director::getInstance()->convertToGL(p);
    //在控制台输出点的坐标
    CCLOG("[%f,%f]",p.x,p.y);
    //如果返回false,就不再往下执行,后面的onTouchMoved和onTouchEnded就不会再执行
    return true;
}
//滑动手势的时候执行
void EventScene::onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *unused_event)
{
    CCLOG("执行移动操作");
}
//手势结束的时候执行
void EventScene::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *unused_event)
{
    CCLOG("手势结束了");
}

多点触屏事件:

    //注册监听器的回调方法,分别回调本节点的三个方法
    //与单点触控是不一样的方法
    auto all_listener = EventListenerTouchAllAtOnce::create();
    all_listener->onTouchesBegan = CC_CALLBACK_2(EventScene::onTouchesBegan, this);
    all_listener->onTouchesMoved = CC_CALLBACK_2(EventScene::onTouchesMoved, this);
    all_listener->onTouchesEnded = CC_CALLBACK_2(EventScene::onTouchesEnded, this);
    //注册监听器
    _eventDispatcher->addEventListenerWithSceneGraphPriority(all_listener, this);

void EventScene::onTouchesBegan(const std::vector<Touch *> &touches, cocos2d::Event *unused_event)
{
    //从触控的多点中,取出一个触控点
    auto t = touches[0];
    //获取屏幕触控点
    auto p = t->getLocationInView();
    //把点的转换为GL坐标
    p = Director::getInstance()->convertToGL(p);
    //在控制台输出点的坐标
    CCLOG("[%f,%f]",p.x,p.y);
}
void EventScene::onTouchesMoved(const std::vector<Touch *> &touches, cocos2d::Event *unused_event)
{
    CCLOG("多点触控执行移动操作");
}
void EventScene::onTouchesEnded(const std::vector<Touch *> &touches, cocos2d::Event *unused_event)
{
    CCLOG("多点触控手势结束了");
}


鼠标事件:

    auto mouse_listener = EventListenerMouse::create();
    mouse_listener->onMouseUp = CC_CALLBACK_1(EventScene::onMouseUp, this);
    mouse_listener->onMouseDown = CC_CALLBACK_1(EventScene::onMouseDown, this);
    mouse_listener->onMouseScroll = CC_CALLBACK_1(EventScene::onMouseScroll, this);
    mouse_listener->onMouseMove = CC_CALLBACK_1(EventScene::onMouseMove, this);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(mouse_listener, this);



void EventScene::onMouseDown(cocos2d::Event *e)
{
    EventMouse* em = (EventMouse*)e;
    int b = em->getMouseButton();
    CCLOG("你点击的是鼠标的%d",b);
}
void EventScene::onMouseMove(cocos2d::Event *e)
{
    EventMouse* em = (EventMouse*)e;
    CCLOG("鼠标移动的坐标[%f,%f]",em->getCursorX(),em->getCursorY());
}
void EventScene::onMouseScroll(cocos2d::Event *e)
{
    EventMouse* em = (EventMouse*)e;
    CCLOG("滑轮滚动的坐标[%f,%f]",em->getScrollX(),em->getScrollY());
}
void EventScene::onMouseUp(cocos2d::Event *e)
{
    CCLOG("鼠标抬起");
}


键盘事件:

    auto keyboard_listener = EventListenerKeyboard::create();
    keyboard_listener->onKeyReleased = CC_CALLBACK_2(EventScene::onKeyReleased, this);
    keyboard_listener->onKeyPressed = CC_CALLBACK_2(EventScene::onKeyPressed, this);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(keyboard_listener, this);

void EventScene::onKeyPressed(EventKeyboard::KeyCode keyCode, cocos2d::Event *event)
{
    switch (keyCode) {
        case cocos2d::EventKeyboard::KeyCode::KEY_UP_ARROW:
            CCLOG("UP...");
            break;
        case cocos2d::EventKeyboard::KeyCode::KEY_DOWN_ARROW:
            CCLOG("DOWN...");
            break;
        case cocos2d::EventKeyboard::KeyCode::KEY_RIGHT_ARROW:
            CCLOG("RIGHT...");
            break;
        case cocos2d::EventKeyboard::KeyCode::KEY_LEFT_ARROW:
            CCLOG("LEFT...");
            break;
    }
}
void EventScene::onKeyReleased(EventKeyboard::KeyCode keyCode, cocos2d::Event *event)
{
    
}


加速度事件:

    //首先,要打开加速度传感器
    Device::setAccelerometerEnabled(true);
    //创建一个加速度传感器监听器,参数是一个回调
    auto acceler_listener = EventListenerAcceleration::create(CC_CALLBACK_2(EventScene::onAcceleration, this));
    //注册监听器
    _eventDispatcher->addEventListenerWithSceneGraphPriority(acceler_listener,this);

void EventScene::onAcceleration(cocos2d::Acceleration *acc, cocos2d::Event *unused_event)
{
    //分别获取x,y,z方向上的加速度
    float x = acc->x;
    float y = acc->y;
    float z = acc->z;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值