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

 

例如这样写,

 

[html] view plaincopy
 
  1. local layer = display.newLayer()    
  2.    self:addChild(layer)  
  3.    layer:setKeypadEnabled(true)  
  4.    layer:addNodeEventListener(cc.KEYPAD_EVENT, function (event)  
  5.        --do things        
  6.    end)  


回调函数中event参数只有一个字段“key”,可以判断获取key是back还是menu,

 

这样一来,按键事件就算掌握了,使用device类提供的对话框咱们来测试下,当然这个最好是真机测试了,

 

[html] view plaincopy
 
  1. function MyScene:ctor()   
  2.     
  3.     local layer = display.newLayer()    
  4.     self:addChild(layer)  
  5.     layer:setKeypadEnabled(true)  
  6.     layer:addNodeEventListener(cc.KEYPAD_EVENT, function (event)  
  7.         if event.key == "back" then  
  8.             print("back")  
  9.             device.showAlert("Confirm Exit", "Are you sure exit game ?", {"YES", "NO"}, function (event)  
  10.                 if event.buttonIndex == 1 then  
  11.                     CCDirector:sharedDirector():endToLua()  
  12.                 else  
  13.                     device.cancelAlert()   
  14.                 end  
  15.             end)  
  16.                   
  17.         elseif event.key == "menu" then  
  18.             print("menu")               
  19.         end        
  20.     end)  
  21.         
  22. end  


有关编译器优化的更完整信息,请参阅优化通知