一、响应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按键。

##文档信息