两个方法可以实现:
方法1:
在Layer的init()中:
auto listener = EventListenerKeyboard::create();
//和回调函数绑定
listener->onKeyPressed = CC_CALLBACK_2(MainMenu::onKeyPressed, this);
listener->onKeyReleased = CC_CALLBACK_2(MainMenu::onKeyReleased, this);
//添加到事件分发器中
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener,this);
实现MainMenu::onKeyPressed和MainMenu::onKeyReleased方法:
void MainMenu::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event)
{
log("============== onKeyPressed, keyCode = %d ==============", keyCode);
int tag = 123456;
auto child = this->getChildByTag(tag);
if (child)
{
child->removeFromParent();
child = nullptr;
}
auto label = Label::createWithTTF(StringUtils::format("onKeyPressed, keyCode = %d", keyCode), "fonts/msyh.ttf", 50.0f);
label->setPosition(Vec2(200,200));
label->setColor(Color3B(255,0,0));
label->setTag(tag);
addChild(label);
MessageBox(StringUtils::format("onKeyPressed, keyCode = %d", keyCode).c_str(), "KEY_CODE");
}
void MainMenu::onKeyReleased(EventKeyboard::KeyCode keyCode, Event * pEvent)
{
log("============== onKeyReleased, keyCode = %d ==============", keyCode);
int tag = 123456;
auto child = this->getChildByTag(tag);
if (child)
{
child->removeFromParent();
child = nullptr;
}
auto label = Label::createWithTTF(StringUtils::format("onKeyReleased, keyCode = %d", keyCode), "fonts/msyh.ttf", 50.0f);
label->setPosition(Vec2(200, 200));
label->setColor(Color3B(255, 0, 0));
label->setTag(tag);
addChild(label);
MessageBox(StringUtils::format("onKeyReleased, keyCode = %d", keyCode).c_str(), "KEY_CODE");
}
第一种方法完成!
方法2:
继承Layer.h,
class MainMenu : public Layer
, 实现它的两个方法
virtual void onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event);
virtual void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event);
并在init()中调用:
setKeyboardEnabled(bool value)
把setKeyboardEnabled(true)设为true
第二个方法完成!
实现过程发现有2点要注意的
1:
它在cocos2dx3.3是只响应 onKeyPressed方法,而并不响应onKeyReleased方法!!