quick-cocos2d-x遊戲開發【12】——硬件按鍵事件

在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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章