cocos2dx-3.6 觸摸,鍵盤,聚焦事件


觸摸的使用:

獲取事件調度對象:

auto dispatcher = Director::getInstance()->getEventDispatcher();

    auto listenerKeyPad = EventListenerKeyboard::create();

    listenerKeyPad->onKeyPressed = [](EventKeyboard::KeyCodekeycode,Event* event){

        CCLOG("onKeyPressed");

    };

    listenerKeyPad->onKeyReleased = [=](EventKeyboard::KeyCodekeycode,Event* event){

        if (keycode == EventKeyboard::KeyCode::KEY_BACKSPACE) {

            CCLOG("OK,You successful!");

        }

     

         KEY_DPAD_LEFT

         KEY_DPAD_RIGHT

         KEY_DPAD_UP

         KEY_DPAD_DOWN

     

        CCLOG("onKeyReleased%d",keycode);

        char hh[10] = {};

        sprintf(hh, "%d",keycode);

        label->setString(hh);

    };

將事件添加到事件調度中,設定優先級

    dispatcher->addEventListenerWithFixedPriority(listenerKeyPad, 2);

將當前事件添加到事件調度中

dispatcher->addEventListenerWithSceneGraphPriority(listenerKeyPad, this);

 

聚焦事件:

 //register focus event

    _eventListener = EventListenerFocus::create();

    _eventListener->onFocusChanged =CC_CALLBACK_2(HelloWorld::onFocusChanged, this);

 

    _eventDispatcher->addEventListenerWithFixedPriority(_eventListener, 1);

 

void HelloWorld::onFocusChanged(cocos2d::ui::Widget*widgetLostFocus, cocos2d::ui::Widget *widgetGetFocus)

{

    CCLOG("onFocusChanged");

    Layout *getLayout = dynamic_cast<Layout*>(widgetGetFocus);

    if (!getLayout && widgetGetFocus) {

        widgetGetFocus->setScale(1.2);

        widgetGetFocus->setColor(Color3B::WHITE);

        tag = widgetGetFocus->getTag();

    }

    

    Layout *loseLayout = dynamic_cast<Layout*>(widgetLostFocus);

    if (!loseLayout && widgetLostFocus) {

        widgetLostFocus->setScale(1.0);

        widgetLostFocus->setColor(Color3B::WHITE);

    }

 

}

 

鍵盤事件:

//register the keyboard event

    _keyboardListener = EventListenerKeyboard::create();

    _keyboardListener->onKeyReleased =CC_CALLBACK_2(HelloWorld::onKeyboardReleased, this);

 

    _eventDispatcher->addEventListenerWithFixedPriority(_keyboardListener, 2);

 

this->setTouchMode(Touch::DispatchMode::ALL_AT_ONCE);

int count = 3;

    for (int i = 0; i < count; ++i) {

        ImageView *w = ImageView::create("CloseNormal.png");

        w->setTouchEnabled(true);

        w->setTag(i);

        w->setLayoutParameter(vparams);

      

        w->addTouchEventListener(CC_CALLBACK_2(HelloWorld::onImageViewClicked,this));

        _horizontalLayout->addChild(w);

        if(i == 0){

            w->requestFocus();

            

        }

 

    }

 
 

void HelloWorld::onKeyboardReleased(EventKeyboard::KeyCodekeyCode, Event* e)

{

    Label *label = (Label*)this->getChildByTag(600);

    if (label) {

        char mm[10] = {};

        sprintf(mm, "%d",keyCode);

        label->setString(mm);

    }

    if (keyCode == EventKeyboard::KeyCode::KEY_DPAD_DOWN) {

        MessageBox("down", "pressed");

    }

    else if (keyCode == EventKeyboard::KeyCode::KEY_DPAD_UP) {

        MessageBox("up", "pressed");

    }

    if (keyCode == (EventKeyboard::KeyCode)28) {

        //模擬android中的按鍵

        cocos2d::EventKeyboard::KeyCode cocos2dKey =EventKeyboard::KeyCode::KEY_DPAD_UP;

        cocos2d::EventKeyboard event(cocos2dKey, false);

        cocos2d::Director::getInstance()->getEventDispatcher()->dispatchEvent(&event);

    }else if (keyCode == (EventKeyboard::KeyCode)29){

        

        cocos2d::EventKeyboard::KeyCode cocos2dKey =EventKeyboard::KeyCode::KEY_DPAD_DOWN;

        cocos2d::EventKeyboard event(cocos2dKey, false);

        cocos2d::Director::getInstance()->getEventDispatcher()->dispatchEvent(&event);

    }else if(keyCode == (EventKeyboard::KeyCode)26){

       

        cocos2d::EventKeyboard::KeyCode cocos2dKey =EventKeyboard::KeyCode::KEY_DPAD_LEFT;

        cocos2d::EventKeyboard event(cocos2dKey, false);

        cocos2d::Director::getInstance()->getEventDispatcher()->dispatchEvent(&event);

    }else if(keyCode == (EventKeyboard::KeyCode)27){

        

        cocos2d::EventKeyboard::KeyCode cocos2dKey =EventKeyboard::KeyCode::KEY_DPAD_RIGHT;

        cocos2d::EventKeyboard event(cocos2dKey, false);

        cocos2d::Director::getInstance()->getEventDispatcher()->dispatchEvent(&event);

    }else if(keyCode == (EventKeyboard::KeyCode)35){

        CCLOG(">>>>>>>tag=%d",tag);

    }

 

}

 

//圖片被選中時的回調:

void HelloWorld::onImageViewClicked(cocos2d::Ref *ref, Widget::TouchEventType touchType)

{

    if (touchType == Widget::TouchEventType::ENDED) {

        Widget *w = (Widget*)ref;

        if (w->isFocusEnabled()) {

            w->setFocusEnabled(false);

            w->setColor(Color3B::YELLOW);

        }else{

            w->setFocusEnabled(true);

            w->setColor(Color3B::WHITE);

        }

    }

 

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM