我最近使用的是cocos2dx 3.0rc2,我想在android平台上回复后退键事件。我了解到我可以覆盖图层的onKeyReleased方法,并使用setKeypadEnabled(true)来捕获后面的键。
但是我遇到了问题,我可以捕获事件,但不准确。也就是说,当我从后退键释放手指时,我希望调用此方法。然而,一旦我将手指放在后面的键上,它就会被触发。话虽如此,它在关键阶段响应,而我希望它能在关键阶段做到。
你能帮我解决这个问题吗?顺便说一句,我测试了代码,似乎在win32上,退格键没有响应(但对我来说无关紧要,因为我只关心android)
以下是代码块:
INIT:
...
this->setKeypadEnabled(true);
...
onKeyReleased:
...
if(keyCode == EventKeyboard::KeyCode::KEY_BACKSPACE) {
onBack(nullptr);
}
...
我还尝试了另一种捕获事件的方法,通过设置监听器而不是简单地放置setKeypadEnabled(true)。结果是一样的。
感谢您的帮助!
答案 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);