Cocos2dx事件处理机制之按键事件

本文介绍如何在Cocos2d-x项目中处理按键事件,包括按键事件的监听和响应方法。通过实例演示了如何实现返回键和菜单键的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、按键事件

 

      使用IOS系统设备中只有Home键,按下Home键,程序进入后台。而使用Android系统的部分设备会有Menu键和

返回键,因此有时需要检测设备的键盘输入,使用键盘事件代理CCKeypadDelegate处理相应的事件。

CCKeypadDelegate类的继承关系如下图所示。

 

布景层类CCLayer和其子类继承自CCKeypadDelegate类,因此布景层类和其子类可以使用获得键盘事件的方法。

 

 

1、CCKeypadDelegate类的函数

 

CCKeypadDelegate类的公共函数见下图。

一般的处理方法是,按下返回键时返回之前的页面,按下Menu键时弹出菜单等。

 

 

2、按键监听事件的使用步骤。

 

<1> 首先使用CCKeypadDelegate接口。CCLayer默认使用CCKeypadDelegate接口,所以其子类不需要再次使用此

接口。

<2> 重写两个按键的回调函数:

  1. virtual void keyBackClicked();  
  2.     virtual void keyMenuClicked();  


<3> setKeypadEnabled(true)设置按键为可操作。

 

 

 

二、按键事件项目实例

 

1、首先新建Cocos2D-X项目,取名为“MyKeypad”,然后在HelloWorldScene.h文件中声明如下成员函数和变量。

  1. class HelloWorld : public cocos2d::CCLayer  
  2. {  
  3. public:  
  4.     // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone  
  5.     virtual bool init();    
  6.   
  7.     // there's no 'id' in cpp, so we recommand to return the exactly class pointer  
  8.     static cocos2d::CCScene* scene();  
  9.       
  10.     virtual void keyBackClicked();  
  11.     virtual void keyMenuClicked();  
  12.          
  13.     // implement the "static node()" method manually  
  14.     CREATE_FUNC(HelloWorld);  
  15.   
  16. private:  
  17.     cocos2d::CCLabelTTF*  m_pLabel;  
  18. };  


2、在HelloWorldScene.cpp文件中的init函数中添加如下所示代码。

  1. bool HelloWorld::init()  
  2. {  
  3.     bool bRet = false;  
  4.     do   
  5.     {  
  6.         CC_BREAK_IF(! CCLayer::init());  
  7.   
  8.         CCSize s = CCDirector::sharedDirector()->getWinSize();  
  9.   
  10.         CCLabelTTF* label = CCLabelTTF::create("Keypad Test""Arial", 28);  
  11.         addChild(label, 0);  
  12.         label->setPosition( ccp(s.width/2, s.height-50) );  
  13.   
  14.         setKeypadEnabled(true);  
  15.   
  16.         // create a label to display the tip string  
  17.         m_pLabel = CCLabelTTF::create("Please press any key...""Arial", 22);  
  18.         m_pLabel->setPosition(ccp(s.width / 2, s.height / 2));  
  19.         addChild(m_pLabel, 0);  
  20.       
  21.         m_pLabel->retain();  
  22.   
  23.         bRet = true;  
  24.     } while (0);  
  25.   
  26.     return bRet;  
  27. }  

 

3、最后在HelloWorldScene.cpp文件中添加如下所示函数。

  1. void HelloWorld::keyBackClicked()  
  2. {  
  3.     m_pLabel->setString("BACK clicked!");  
  4. }  
  5.   
  6. void HelloWorld::keyMenuClicked()  
  7. {  
  8.     m_pLabel->setString("MENU clicked!");  
  9. }  


 

4、实例运行效果图。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值