首先,在Scene中重载下面两个函数
virtual void onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event);
virtual void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event);
第一个函数在按下时触发,第二个函数在松开是触发。
然后再Scene init的时候写上
setKeyboardEnabled(true);
或者是
//注册捕捉监听
auto listenerkeyPad = EventListenerKeyboard::create();
listenerkeyPad->onKeyReleased = CC_CALLBACK_2(HelloWorld::onKeyReleased, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listenerkeyPad, this);
当然你也可以同时写,这样就监听了两次,如果你需要的话。。。
我要做的是在5秒内按两次返回键退出,所以我只需要重载onKeyReleased函数即可。下面是函数的具体实现
void HelloWorld::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event)
{
switch (keyCode)
{
case cocos2d::EventKeyboard::KeyCode::KEY_BACK:
{
if(m_IsNeedExit == false)
{
m_IsNeedExit = true;
this->scheduleOnce(SEL_SCHEDULE(&HelloWorld::CloseExitSign),5.0f);
}
else
{
menuCloseCallback(nullptr);
}
}
default:
break;
}
}
void HelloWorld::menuCloseCallback(Ref* pSender)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
return;
#endif
Director::getInstance()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
//定时器回调 退出标志关闭
void HelloWorld::CloseExitSign(float dt)
{
m_IsNeedExit = false;
}
m_IsNeedExit 是类HelloWorld的一个成员变量,在构造函数中会定义为false。
需要注意的是,如果头文件中需要USING_NS_CC;