第六節:事件處理

單點觸屏事件:

    //先創建一個單點觸屏監聽器
    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;
}



發佈了51 篇原創文章 · 獲贊 13 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章