Cocos2dx 3.2键盘监听的打开方式以及点击两次返回退出的实现方法
首先,在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;