一、响应android的back按键
我们都知道,cocos2d-x可以方便的构建不同平台的应用,当我们构建基于android的应用时,有时候我们可能需要用到android的返回按键。当然这个返回按键在iPhone手机上是找不到的(目前还是如此)。既然android有这个按键,cocos2d-x当然不会对它置之不理,在cocos2d-x可以方便的通过程序来响应返回按键动作。
二、简单的例子
这个例子是基于cocos2d-x 3.0的,以前的版本不一样哦,所以一定要看清楚你现在用的是什么版本。在cocos2d-x 3.0中,Layer类中有一个
virtual void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event);
这样的虚方法,我们要想响应用户的按键动作,可以在相应的Layer中重写这个函数。为了方便在不同Layer中使用,我这里写了一个BaseLayer,这样如果想要在某个定义的Layer中响应onKeyReleased事件,只需要继承BaseLayer就可以了。
BaseLayer.h
#ifndef __BASE_LAYER_H__ #define __BASE_LAYER_H__ #include "cocos2d.h" using namespace cocos2d; class BaseLayer:public Layer{ public: virtual void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event); bool virtual init(); }; #endif
BaseLayer.cpp
#include "BaseLayer.h" void BaseLayer::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event){ if(keyCode == EventKeyboard::KeyCode::KEY_BACKSPACE){ Director::getInstance()->popScene(); }else if (keyCode == EventKeyboard::KeyCode::KEY_MENU){ } } bool BaseLayer::init(){ if(!Layer::init()){ return false; } this->setKeyboardEnabled(true); return true; }
非常简单,但是还是简单解释下,注意在init函数中,我们调用了this->setKeyboardEnabled(true);这是非常重要的,否则按键将不会有响应效果。然后,我们看onKeyReleased函数中的参数,有一个是KeyCode,我们可以通过它来区分不同按键,KeyCode是一个enum
enum class KeyCode { KEY_NONE = 0, KEY_PAUSE = 0x0013, KEY_SCROLL_LOCK = 0x1014, KEY_PRINT = 0x1061, KEY_SYSREQ = 0x106A, KEY_BREAK = 0x106B, KEY_ESCAPE = 0x001B, KEY_BACKSPACE = 0x0008, KEY_TAB = 0x000 ... }
这里我们需要处理KEY_BACKSPACE,所有正如上面代码所示,我们判断keyCode == EventKeyboard::KeyCode::KEY_BACKSPACE,如果是KEY_BACKSPACE,那么就处理这个按键的响应。
总结
简单讲述了如何在cocos2d-x中响应backspace按键。
##文档信息
- 版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
- 原文网址:http://www.cocosk.com/articles/2014⁄7/21/cocos2d-x-3-android-backspace-key.html
- 作者:卧雪Sirk