cocos2dx onKeyReleased在keydown调用,而不是在android中调用keyup

时间:2014-06-07 13:09:14

标签: android cocos2d-x cocos2d-x-3.0

我最近使用的是cocos2dx 3.0rc2,我想在android平台上回复后退键事件。我了解到我可以覆盖图层的onKeyReleased方法,并使用setKeypadEnabled(true)来捕获后面的键。

但是我遇到了问题,我可以捕获事件,但不准确。也就是说,当我从后退键释放手指时,我希望调用此方法。然而,一旦我将手指放在后面的键上,它就会被触发。话虽如此,它在关键阶段响应,而我希望它能在关键阶段做到。

你能帮我解决这个问题吗?顺便说一句,我测试了代码,似乎在win32上,退格键没有响应(但对我来说无关紧要,因为我只关心android)

以下是代码块:

INIT:

...
this->setKeypadEnabled(true);
...

onKeyReleased:

...
if(keyCode ==  EventKeyboard::KeyCode::KEY_BACKSPACE) {
    onBack(nullptr);
}
...

我还尝试了另一种捕获事件的方法,通过设置监听器而不是简单地放置setKeypadEnabled(true)。结果是一样的。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

在我们的应用中,我们确实喜欢这样:

auto obKeyBackListener = EventListenerKeyboard::create();
obKeyBackListener->onKeyReleased = [=](EventKeyboard::KeyCode keyCode, Event* event)
{
    if (keyCode == EventKeyboard::KeyCode::KEY_BACK) // KEY_BACK
    {
        event->stopPropagation(); // stop propagation for this event
        onBack(nullptr);        
    }
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(obKeyBackListener, this);

答案 1 :(得分:0)

您编写了正确的代码但使用了错误的密钥代码。

它应该是EventKeyboard::KeyCode::KEY_ESCAPE

答案 2 :(得分:0)

改变这个:

this->setKeypadEnabled(true);

用这个:

auto keyboardListener = EventListenerKeyboard::create();
keyboardListener->onKeyReleased = CC_CALLBACK_2(HelloWorld::onKeyReleased, this);
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(keyboardListener, this);