一、按键事件
使用IOS系统设备中只有Home键,按下Home键,程序进入后台。而使用Android系统的部分设备会有Menu键和
返回键,因此有时需要检测设备的键盘输入,使用键盘事件代理CCKeypadDelegate处理相应的事件。
CCKeypadDelegate类的继承关系如下图所示。
布景层类CCLayer和其子类继承自CCKeypadDelegate类,因此布景层类和其子类可以使用获得键盘事件的方法。
1、CCKeypadDelegate类的函数
CCKeypadDelegate类的公共函数见下图。
一般的处理方法是,按下返回键时返回之前的页面,按下Menu键时弹出菜单等。
2、按键监听事件的使用步骤。
<1> 首先使用CCKeypadDelegate接口。CCLayer默认使用CCKeypadDelegate接口,所以其子类不需要再次使用此
接口。
<2> 重写两个按键的回调函数:
- virtual void keyBackClicked();
- virtual void keyMenuClicked();
<3> setKeypadEnabled(true)设置按键为可操作。
二、按键事件项目实例
1、首先新建Cocos2D-X项目,取名为“MyKeypad”,然后在HelloWorldScene.h文件中声明如下成员函数和变量。
- class HelloWorld : public cocos2d::CCLayer
- {
- public:
- // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
- virtual bool init();
- // there's no 'id' in cpp, so we recommand to return the exactly class pointer
- static cocos2d::CCScene* scene();
- virtual void keyBackClicked();
- virtual void keyMenuClicked();
- // implement the "static node()" method manually
- CREATE_FUNC(HelloWorld);
- private:
- cocos2d::CCLabelTTF* m_pLabel;
- };
2、在HelloWorldScene.cpp文件中的init函数中添加如下所示代码。
- bool HelloWorld::init()
- {
- bool bRet = false;
- do
- {
- CC_BREAK_IF(! CCLayer::init());
- CCSize s = CCDirector::sharedDirector()->getWinSize();
- CCLabelTTF* label = CCLabelTTF::create("Keypad Test", "Arial", 28);
- addChild(label, 0);
- label->setPosition( ccp(s.width/2, s.height-50) );
- setKeypadEnabled(true);
- // create a label to display the tip string
- m_pLabel = CCLabelTTF::create("Please press any key...", "Arial", 22);
- m_pLabel->setPosition(ccp(s.width / 2, s.height / 2));
- addChild(m_pLabel, 0);
- m_pLabel->retain();
- bRet = true;
- } while (0);
- return bRet;
- }
3、最后在HelloWorldScene.cpp文件中添加如下所示函数。
- void HelloWorld::keyBackClicked()
- {
- m_pLabel->setString("BACK clicked!");
- }
- void HelloWorld::keyMenuClicked()
- {
- m_pLabel->setString("MENU clicked!");
- }
4、实例运行效果图。