cocos2dx 3.0 android返回键

查了一下论坛和网上,都没有找到新版3.0 怎样弄 android返回键的

auto keyboardlistener = EventListenerKeyboard::create();
keyboardlistener->onKeyPressed = CC_CALLBACK_2(HelloWorld::onKeyPressed, this);
keyboardlistener->onKeyReleased = CC_CALLBACK_2(HelloWorld::onKeyReleased, this);
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(keyboardlistener, this); 

用上面几句好像没反应,还是说用其它方法处理的?

这个问题。很久就有人问了。一直没有解决:2:

测试了一下键盘监听器

按下android返回键是8?
按下android菜单键是4199?

其它android机型也是这两个值?

onKeyReleased处理事件监听就可以啊

在cocos2d中的宏是Backspace你用宏来进行判断就好了

用这个代码就行

 

//对手机返回键的监听 
auto listener = EventListenerKeyboard::create(); 
//和回调函数绑定 
listener->onKeyReleased = CC_CALLBACK_2(StartGame::onKeyReleased,this); 
//添加到事件分发器中 
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener,this); 

return true; 


void StartGame::onKeyReleased(EventKeyboard::KeyCode keyCode,Event * pEvent) 
{ 
Director::getInstance()->end(); 
} 


```

楼上方法都试过不行啊,win32还可以,Android上不行啊,什么情况,求大神解决啊

这个问题。很久就有人问了。一直没有解决:6::6:

用了这段代码,一个怪问题搞不清楚了,在模拟器上点返回键没反映,点了menu键却end了,再走过程,点返回键的时候方法就没走,只有点menu键才走onKeyReleased的方法,找不到是什么原因了

:10:

你不会是判断了keycode了吧,返回键的code是8,我写的时候就是判断如果code是8就切换,没有什么问题。

我也只是在测试,什么判断都没做,在onKeyReleased方法刚进入的地方打印一条语句,只有点菜单键执行,点其他任何键都不执行

困扰好几天了

:6:

新建一个项目就好了,我再检查检查

例子代码中的 KeyPadTest.cpp 就有的

例子上如果真不行。

自己 在 android 端实现,

觉得界面丑就掉掉c 呗。

ios可以省掉

小塔,你这样的代码在2.x可以,3.0不行了addEventListenerWithFixedPriority(listerner,-1)这样就行了,你可以试一下真机

在init()加:
auto listener = EventListenerKeyboard::create();
listener->onKeyReleased =&](EventKeyboard::KeyCode keyCode, Event* event)
{
if(keyCode == EventKeyboard::KeyCode::KEY_BACKSPACE)
{
Director::getInstance()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
};
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);

我开始一直用的KEY_RETURN,各种不行,网上也有人问,可是没人回答,后来自己慢慢试,原来返回键是KEY_BACKSPACE,坑啊。。。

我手机的返回键是KEY_ESCAPE

我的也是escape

估计不同的手机返回键的码是不一样的把,所以不如写成如下的形式。

auto listener = EventListenerKeyboard::create();
    listener->onKeyReleased = ](EventKeyboard::KeyCode key, Event*)
    {
        if(EventKeyboard::KeyCode::KEY_RETURN == key || EventKeyboard::KeyCode::KEY_ESCAPE == key || EventKeyboard::KeyCode::KEY_BACKSPACE == key)
        {
            Director::getInstance()->end();
        }
    };
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

```