【已解决】cocos2d-x 3.2 如何添加 机顶盒按键 响应

原来2.x下的遥控器相应的函数,好像整合到键盘事件里了:

CCLayer.h下:

virtual void onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event);
virtual void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event);


CC_DEPRECATED_ATTRIBUTE virtual bool isKeypadEnabled() const final { return _keyboardEnabled; }
CC_DEPRECATED_ATTRIBUTE virtual void setKeypadEnabled(bool value);

/** @deprecated Please override onKeyReleased and check the keycode of KeyboardEvent::KeyCode::Menu(KEY_BACKSPACE) instead. */
CC_DEPRECATED_ATTRIBUTE virtual void keyBackClicked() final {};
CC_DEPRECATED_ATTRIBUTE virtual void keyMenuClicked() final {};

CCEventKeyboard.h下也有对应的枚举值:
KEY_DPAD_LEFT,
KEY_DPAD_RIGHT,
KEY_DPAD_UP,
KEY_DPAD_DOWN,

    KEY_DPAD_CENTER,

经测试,在mac下,能识别键盘的键值,但是经过android编译放到机顶盒上后,KEY_DPAD_X值没有识别出来,也没执行,哪里出错了?

贴2段代码供LZ参考一下:
1.在头文件增加如下代码:

public:
    void onFocusChanged(cocos2d::ui::Widget* widgetLostFocus, cocos2d::ui::Widget* widgetGetFocus);
    void onKeyboardReleased(cocos2d::EventKeyboard::KeyCode, cocos2d::Event*);
protected:
    cocos2d::ui::Widget *_widget;
    cocos2d::EventListenerFocus *_eventListener;
    cocos2d::EventListenerKeyboard* _keyboardListener;
```

2.在cpp中增加如下代码
/* ==============test============== */
    LinearLayoutParameter *layoutParams = LinearLayoutParameter::create();
    layoutParams->setMargin(Margin(59,40,0,0));
    
    HBox *layoutHeader = HBox::create();
    //    layoutHeader->setLoopFocus(true);
    layoutHeader->setLayoutParameter(layoutParams);
    layoutHeader->setFocused(true);
    _widget = layoutHeader;
    /* ==============test============== */
    
    //register focus event
    _eventListener = EventListenerFocus::create();
    _eventListener->onFocusChanged = CC_CALLBACK_2(RotateLayer::onFocusChanged, this);
    _eventDispatcher->addEventListenerWithFixedPriority(_eventListener, 1);
    //register the keyboard event
    _keyboardListener = EventListenerKeyboard::create();
    _keyboardListener->onKeyReleased = CC_CALLBACK_2(RotateLayer::onKeyboardReleased, this);
    
    _eventDispatcher->addEventListenerWithFixedPriority(_keyboardListener, 2);
    
    this->setTouchEnabled(true);
    this->setTouchMode(Touch::DispatchMode::ALL_AT_ONCE);

void RotateLayer::onKeyboardReleased(EventKeyboard::KeyCode keyCode, Event* e)
{
    
    if (keyCode == EventKeyboard::KeyCode::KEY_DPAD_DOWN) {
        MessageBox("down", "pressed");
    }
    else if (keyCode == EventKeyboard::KeyCode::KEY_DPAD_UP) {
        MessageBox("up", "pressed");
    }
}

void RotateLayer::onFocusChanged(cocos2d::ui::Widget *widgetLostFocus, cocos2d::ui::Widget *widgetGetFocus)
{
    Layout *getLayout = dynamic_cast(widgetGetFocus);
    if (!getLayout && widgetGetFocus) {
        widgetGetFocus->setScale(1.2);
        widgetGetFocus->setColor(Color3B::RED);
    }
    
    Layout *loseLayout = dynamic_cast(widgetLostFocus);
    if (!loseLayout && widgetLostFocus) {
        widgetLostFocus->setScale(1.0);
        widgetLostFocus->setColor(Color3B::WHITE);
    }
}
```

我没仔细看,直接用了addEventListenerWithSceneGraphPriority,应该用addEventListenerWithFixedPriority,搞定了!谢谢

能加下我QQ帮我解决下么??