在quick中,對於按鍵事件也進行了重新封裝,和node的觸摸事件一樣,也是通過addNodeEventListener來實現。所謂按鍵事件,主要是針對於android設備中的返回鍵“back”和菜單鍵“menu”的響應,在前面的一篇博文中我也簡單提過一次,不過咱們還是系統性的來學習一下。
首先清楚預定義的層事件有兩個,
- cc.ACCELERATE_EVENT - 重力感應事件
- cc.KEYPAD_EVENT - 硬件按鍵事件
- cc.NODE_EVENT - enter, exit 等事件
- cc.NODE_ENTER_FRAME_EVENT - 幀事件
- cc.NODE_TOUCH_EVENT - 觸摸事件
- cc.NODE_TOUCH_CAPTURE_EVENT - 捕獲觸摸事件
要實現一個按鍵響應事件主要就兩步,
1.打開鍵盤功能setKeypadEnabled(true)
2.添加事件監聽addNodeEventListener
例如這樣寫,
local layer = display.newLayer()
self:addChild(layer)
layer:setKeypadEnabled(true)
layer:addNodeEventListener(cc.KEYPAD_EVENT, function (event)
--do things
end)
回調函數中event參數只有一個字段“key”,可以判斷獲取key是back還是menu,
這樣一來,按鍵事件就算掌握了,使用device類提供的對話框咱們來測試下,當然這個最好是真機測試了,
function MyScene:ctor()
local layer = display.newLayer()
self:addChild(layer)
layer:setKeypadEnabled(true)
layer:addNodeEventListener(cc.KEYPAD_EVENT, function (event)
if event.key == "back" then
print("back")
device.showAlert("Confirm Exit", "Are you sure exit game ?", {"YES", "NO"}, function (event)
if event.buttonIndex == 1 then
CCDirector:sharedDirector():endToLua()
else
device.cancelAlert()
end
end)
elseif event.key == "menu" then
print("menu")
end
end)
end