Cocos2dx 3.2键盘监听的打开方式以及点击两次返回退出的实现方法

Cocos2dx 3.2键盘监听的打开方式以及点击两次返回退出的实现方法

首先,在Scene中重载下面两个函数

  1. virtual void onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event);  
  2. virtual void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event);  

第一个函数在按下时触发,第二个函数在松开是触发。


然后再Scene init的时候写上

  1. setKeyboardEnabled(true);  

或者是
  1. //注册捕捉监听  
  2. auto listenerkeyPad = EventListenerKeyboard::create();  
  3. listenerkeyPad->onKeyReleased = CC_CALLBACK_2(HelloWorld::onKeyReleased, this);  
  4. _eventDispatcher->addEventListenerWithSceneGraphPriority(listenerkeyPad, this);  

当然你也可以同时写,这样就监听了两次,如果你需要的话。。。


我要做的是在5秒内按两次返回键退出,所以我只需要重载onKeyReleased函数即可。下面是函数的具体实现

  1. void HelloWorld::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event)  
  2. {  
  3.     switch (keyCode)  
  4.     {  
  5.     case cocos2d::EventKeyboard::KeyCode::KEY_BACK:  
  6.         {  
  7.             if(m_IsNeedExit == false)  
  8.             {  
  9.                 m_IsNeedExit = true;  
  10.                 this->scheduleOnce(SEL_SCHEDULE(&HelloWorld::CloseExitSign),5.0f);  
  11.             }  
  12.             else  
  13.             {  
  14.                 menuCloseCallback(nullptr);  
  15.             }  
  16.         }  
  17.     default:  
  18.         break;  
  19.     }  
  20. }  
  21.   
  22. void HelloWorld::menuCloseCallback(Ref* pSender)  
  23. {  
  24. #if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)  
  25.     MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");  
  26.     return;  
  27. #endif  
  28.   
  29.     Director::getInstance()->end();  
  30.   
  31. #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)  
  32.     exit(0);  
  33. #endif  
  34. }  
  35.   
  36. //定时器回调 退出标志关闭  
  37. void HelloWorld::CloseExitSign(float dt)  
  38. {  
  39.     m_IsNeedExit = false;  
  40. }  


m_IsNeedExit 是类HelloWorld的一个成员变量,在构造函数中会定义为false。


需要注意的是,如果头文件中需要USING_NS_CC;

原文地址:https://www.cnblogs.com/dudu580231/p/4560384.html