cocos3.0rc0的android返回键问题

请问下各位大神,3.0rc0版本怎样处理android返回键啊?
原来的版本是可以在自己的Layer中重载keyBackClicked(),现在这个函数被final了,根据注释,说是“Please override onKeyReleased and check the keycode of KeyboardEvent::KeyCode::Menu(KEY_BACKSPACE) instead”
于是我就重载了 onKeyReleased ,代码这样写的:
void CMyLayer::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
}
}
结果……就木有结果了,一点效果都没
有哪位大大解决了这个问题,能回复下吗,感激……

我也遇到这个问题,求解答。。。

把CMyLayer添加到场景的最顶层(zOrder调大一些),然后每次切换场景都卸载再重新添加一次~
我是这么做的,目前为止还没有遇到问题(可能这么做有点暴力,哈哈)

PS:我用的是beta2版本,但应该是一样的~

在Android层监控满足楼主需求么?

我也是碰到这个问题.
beta2,rc都是这样.没有任何返应.

3.0 改用 EventDispatcher 来管理触摸、按钮等事件
在 CMyLayer::init 中加入

auto listener = EventListenerKeyboard::create();
listener->onKeyReleased = CC_CALLBACK_2(CMyLayer::onKeyReleased, this);

this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);

更加信息信息,可参考

https://github.com/cocos2d/cocos-docs/blob/master/manual/framework/native/input/event-dispatcher/zh.md

auto dispatcher = Director::getInstance()->getEventDispatcher();
auto listener = EventListenerKeyboard::create();
listener->onKeyPressed = CC_CALLBACK_2(SceneModule::onKeyPressed, this);
listener->onKeyReleased = CC_CALLBACK_2(SceneModule::onKeyReleased, this);
dispatcher->addEventListenerWithSceneGraphPriority(listener, this);

很不幸.我也是照着这个例子抄的.
在win下有反应.
在安卓上.没有反应.

我用的一直好好的,我是在lua里用的,lua能用, C++就更没问题了
sample:

function GameScene:ctor(…)

self:registerScriptHandler(function(event)
print('event => ', event)
if event == “enter” then
self:initKeypadHandler(()
elseif event == ‘exit’ then
self:cleanup()
end
end)
end

function GameScene:initKeypadHandler()
local function onKeyReleased(keyCode, event)
if keyCode == cc.KeyCode.KEY_BACKSPACE then
cc.Director:getInstance():popScene()
elseif keyCode == cc.KeyCode.KEY_MENU then
end
end

local listener = cc.EventListenerKeyboard:create()
listener:registerScriptHandler(onKeyReleased, cc.Handler.EVENT_KEYBOARD_RELEASED )
self:getEventDispatcher():addEventListenerWithSceneGraphPriority(listener, self)
end

方法是按官网给的

现在关健是很多人出现这种问题.

你不要觉的没问题.你可以新建一个C++项目试一下.

我用3.0rc.beta2都试过.完全按照官方给的例子,
win下面可以响应.但是编译到安卓就没反应.

顶呀.问题没有解决.:2::2::2::2:

:2: 再顶…

:2:。。我也是遇到换个问题啊。郁闷

:6:
auto listener = EventListenerKeyboard::create();
listener->onKeyPressed = CC_CALLBACK_2(HelloWorld::onKeyPressed, this);
listener->onKeyReleased = CC_CALLBACK_2(HelloWorld::onKeyReleased, this);
// _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); //妈蛋,这样写就在android没反应,下面的这中写法就OK。
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);

我的也是beta2版本

我用3.0RC1用你这种方法也不行:6::6::6::6:

我用的beta2版,怎么用这个方法还是不行呀,请大侠赐教呀

用这个代码就行

 

//对手机返回键的监听 
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(); 
} 


```

非常感谢,完美解决问题

在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);