求助 我Cocos2d-x中键盘事件没有反应!

auto keyListener = EventListenerKeyboard::create();
keyListener->setEnabled(true);
keyListener->onKeyReleased = CC_CALLBACK_2(HelloWorld::onKeyReleased, this);
keyListener->onKeyPressed = CC_CALLBACK_2(HelloWorld::onKeyPressed, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(keyListener, this);

void HelloWorld:: onKeyPressed(EventKeyboard::KeyCode keyCode, Event* unused_event) //键盘被按下
{
cout<<“keyevent”;
}
void HelloWorld::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* unused_event) //键盘被释放
{
//cout<<&keyCode<<“keyevent two”;
cout<<“keyevent two”;
}

但是就是不行我就不知道为什么了! 求解求帮助!

你这是考验色盲还是色弱,跟踪到键盘事件分发的函数看看不久知道了

sorry 第一次用这个 发东西! 那个我看了和我的一样但是我的就是不行 不知道为什么!

sorry 第一次用这个 发东西! 那个我看了和我的一样但是我的就是不行 不知道为什么!

auto dispatcher = Director::getInstance()->getEventDispatcher();
auto listener = EventListenerKeyboard::create();
listener->onKeyReleased = CC_CALLBACK_2(HelloWorld::onKeyReleased, this);
dispatcher->addEventListenerWithSceneGraphPriority(listener, this);
void HelloWorld::onKeyReleased(EventKeyboard::KeyCode keycode, Event* event)
{
if (keycode == EventKeyboard::KeyCode::KEY_ESCAPE)
{
干点啥
}

}

//KEY_ESCAPE指的是键盘上的ESC键和安卓上的返回键(3.2版本以前好像不是)

还是不行 按键以后没任何反应

auto dispatcher = Director::getInstance()->getEventDispatcher();
auto keyListener = EventListenerKeyboard::create();
keyListener->setEnabled(false);
keyListener->onKeyReleased = CC_CALLBACK_2(HelloWorld::onKeyReleased,  this);
keyListener->onKeyPressed  = CC_CALLBACK_2(HelloWorld::onKeyPressed, this);

// _eventDispatcher->addEventListenerWithSceneGraphPriority(keyListener, this);
dispatcher->addEventListenerWithSceneGraphPriority(keyListener, this);

return true;

}

void HelloWorld:: onKeyPressed(EventKeyboard::KeyCode keyCode, Event* unused_event) //键盘被按下
{
log(“key onKeyPressed”);
}
void HelloWorld::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* unused_event) //键盘被释放
{
//cout<<&keyCode<<“keyevent two”;
log(“key onKeyReleased”);

}

这是我实现的:我用的是3.x的引擎版本;

//初始化Keyboard
void GameScene::initKeyboard(){
    auto listener = EventListenerKeyboard::create();
    listener->onKeyPressed = CC_CALLBACK_2(GameScene::onKeyPressed, this);
    listener->onKeyReleased = CC_CALLBACK_2(GameScene::onKeyReleased, this);

    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
}

void GameScene::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event){
    log("onKeyPressed");
    //检测back按键,win32下是Esc键
    if(keyCode == EventKeyboard::KeyCode::KEY_BACK){
        log("KEY_BACK down");
    }
}

void GameScene::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event){
    log("onKeyReleased");
    if(keyCode == EventKeyboard::KeyCode::KEY_BACK){
        log("KEY_BACK up");
        if(!dialogState){
            GameScene::pauseGameCallback();
        }
    }
}

```


其中有一点儿和你的不一样的是 那个setEnabled(true);好像不用设置

那个是可写可不写!但是我又先建了个 工程 还是不行的! 不知道为什么 研究了半天了 各种百度 google 都不行~ 按了键完全不打印东西出来

我用的是 3.1

你debug时能执行到那里么? debug试试

执行不到那些回调函数 感觉 键盘事件没启动! 不知道怎么启动 但是我 看test 中的和我写的完全一样都可以

你注册键盘事件的Listener那里执行到了么?

执行到了的!

难道就没人知道这个问题怎么解决了吗!!! :3:

我找到原因了 手机和 pad是没有实体键盘的所以 再怎么 按 都不会出来! 但是 当我换到调试器为 mac的时候就发现可以了可以点击了能调试出来了…… 难道 iphone 和 ipad那些模拟器不支持 键盘事件? !!!

:9::9::9:

在CCGLView的这个函数中加个断点,看看是不是能断住
void GLView::onGLFWKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
{
if (GLFW_REPEAT != action)
{
EventKeyboard event(g_keyCodeMap, GLFW_PRESS == action);
auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->dispatchEvent(&event);
}
}