【已解决】cocos2dx lua监听返回键

版本2.2.1

想在lua里面监听android平台的返回键,找了一下没有找到方法,各位大神指教一二吧!

layer:registerScriptKeypadHandler( function(callback)
if callback == “backClicked” then
–to do
end
end)

Thanks a lot

给力啊,谢谢大神

— Begin quote from ____

引用第1楼coolboyding于2014-05-08 18:47发表的 :
layer:registerScriptKeypadHandler( function(callback)
if callback == “backClicked” then
–to do
end
end) http://www.cocoachina.com/bbs/job.php?action=topost&tid=200892&pid=947283

— End quote

你好问一下,2.2.3的如和设置啊,我这样写的监听不了

layer:setKeypadEnabled(true)
self:addChild(layer,-1)
layer:addNodeEventListener(cc.KEYPAD_EVENT,function(event)
if event.name == “back” then
print(“back back ***************”)
elseif event.name == “menu” then
print(“menu menu ***************”)

请把代码粘贴在这里


```

— Begin quote from ____

引用第1楼coolboyding于2014-05-08 18:47发表的 :
layer:registerScriptKeypadHandler( function(callback)
if callback == “backClicked” then
–to do
end
end) http://www.cocoachina.com/bbs/job.php?action=topost&tid=200892&pid=947283

— End quote

你好问一下,2.2.3的如和设置啊,我这样写的监听不了

layer:setKeypadEnabled(true)
  self:addChild(layer,-1)
  layer:addNodeEventListener(cc.KEYPAD_EVENT,function(event)
      if event.name == "back" then
      print("back back ***************")
      elseif event.name == "menu" then
      print("menu menu ***************") 


```

哥,知道3.0 以上版本 是怎么弄的么? 求教

int LuaEngine::handleKeypadEvent(void* data)
{
if (NULL == data)
return 0;

KeypadScriptData* keypadScriptData = static_cast<KeypadScriptData*>(data);
if (NULL == keypadScriptData->nativeObject)
    return 0;

int handler = ScriptHandlerMgr::getInstance()->getObjectHandler(keypadScriptData->nativeObject, ScriptHandlerMgr::HandlerType::KEYPAD);

if (0 == handler)
    return 0;

EventKeyboard::KeyCode action = keypadScriptData->actionType;

switch(action)
{
    case EventKeyboard::KeyCode::KEY_BACKSPACE:
        _stack->pushString("backClicked");
        break;
    case EventKeyboard::KeyCode::KEY_MENU:
        _stack->pushString("menuClicked");
        break;
    default:
        break;
}

int ret = _stack->executeFunctionByHandler(handler, 1);
_stack->clean();
return ret;

}

看源码LuaEngine.app文件那 只就响应了KEY_BACKSPACE 和 KeyCode::KEY_MENU 如果想要响应其他按键 需要在源码修改加上就好了

--监听手机返回键
function GameScene:return_key(layer)
    --监听手机返回键
    local key_listener = cc.EventListenerKeyboard:create()
    --返回键回调
    local function key_return()
        local scene = require("WelcomeScene")
        cc.Director:getInstance():replaceScene(scene:createScene())
    end
    --lua中得回调,分清谁绑定,监听谁,事件类型是什么
    key_listener:registerScriptHandler(key_return,cc.Handler.EVENT_KEYBOARD_PRESSED)
    local eventDispatch = layer:getEventDispatcher()
    eventDispatch:addEventListenerWithSceneGraphPriority(key_listener,layer)
end


```

mark…mark

:14: 很好很强大 mark一下

事件类型需要改成EVENT_KEYBOARD_RELEASED

mark一下…

我3.3不行,难道有什么更改吗?

mark下~~