东东

cocos2d-x响应安卓的返回键和菜单键
因为苹果手机只有一个home键,所以只要按下home键就可以直接把程序进入后台,但是安卓比苹果多了一个返回键和菜单...
扫描右侧二维码阅读全文
31
2015/01

cocos2d-x响应安卓的返回键和菜单键

屏幕快照 2015-01-31 下午6.20.47.png

因为苹果手机只有一个home键,所以只要按下home键就可以直接把程序进入后台,但是安卓比苹果多了一个返回键和菜单键,所以对于跨平台的cocos2d-x来说还是需要注意的.

对于这个来说,其实只需要实现两个函数就可以了,一个实现的是响应返回键,一个实现的响应菜单键

因为一般创建的都是继承的CCLayer的,而大家点CCLayer进去看一下会发现是这样的

屏幕快照 2015-01-31 下午6.24.15.png

CCLayer还继承了CCKeypadDelegate,这个就是要响应的代理,当然如果你感兴趣再进去看看也无妨


所以只需要在当前层实现这两个方法都可以了

virtual void keyBackClicked();//响应返回键
virtual void keyMenuClicked();//响应菜单键

然后在初始化里面设置当前层的按键可操作


 setKeypadEnabled(true);

这样他就会自动调用了


这里给一个test的程序

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"

class HelloWorld : public cocos2d::CCLayer
{
public:
    virtual bool init();
    static cocos2d::CCScene* scene();
    CREATE_FUNC(HelloWorld);
    virtual void keyBackClicked();//响应返回键
    virtual void keyMenuClicked();//响应菜单键
};

#endif // __HELLOWORLD_SCENE_H__

然后就是cpp里面,在实现方法里面设置你想调用的方法就行了,因为只是测试,我是设置了一个label,这样在点击菜单和返回键时,label的值会变,这样看的更清楚


#include "HelloWorldScene.h"

USING_NS_CC;

CCScene* HelloWorld::scene()
{
    CCScene *scene = CCScene::create();
    HelloWorld *layer = HelloWorld::create();
    scene->addChild(layer);
    return scene;
}
bool HelloWorld::init()
{
  
    if ( !CCLayer::init() )
    {
        return false;
    }
    setKeypadEnabled(true);
    //测试使用
    CCLabelTTF*label=CCLabelTTF::create("ss", "", 20);
    label->setPosition(ccp(100, 200));
    label->setTag(1);
    addChild(label);
    
    return true;
}
void HelloWorld::keyBackClicked()
{
    ((CCLabelTTF*)this->getChildByTag(1))->setString("keyBackClicked");
}
void HelloWorld::keyMenuClicked()
{
    ((CCLabelTTF*)this->getChildByTag(1))->setString("keyMenuClicked");
}

其他就没什么了,只是这两个方法而已,然后打包给安卓机就可以测试了


Last modification:January 1st, 1970 at 08:00 am
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment