全局系统事件

本篇教程,我们将介绍 Cocos Creator 的全局系统事件。

全局系统事件是指与节点树不相关的各种全局事件,由 cc.systemEvent 来统一派发,目前支持了以下几种事件:

  • 键盘事件
  • 设备重力传感事件

除此之外,鼠标事件与触摸事件请参考 节点系统事件

注意:目前已经不建议直接使用 cc.eventManager 来注册任何事件,cc.eventManager 的用法也不保证持续性,有可能随时被修改。

如何定义输入事件

键盘、设备重力传感器此类全局事件是通过函数 cc.systemEvent.on(type, callback, target) 注册的。

可选的 type 类型有:

  • cc.SystemEvent.EventType.KEY_DOWN (键盘按下)
  • cc.SystemEvent.EventType.KEY_UP (键盘释放)
  • cc.SystemEvent.EventType.DEVICEMOTION (设备重力传感)

键盘事件

  • 事件监听器类型:cc.SystemEvent.EventType.KEY_DOWNcc.SystemEvent.EventType.KEY_UP
  • 事件触发后的回调函数:
    • 自定义回调函数:callback(event);
  • 回调参数:
  1. cc.Class({
  2. extends: cc.Component,
  3. onLoad: function () {
  4. // add key down and key up event
  5. cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
  6. cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this);
  7. },
  8. onDestroy () {
  9. cc.systemEvent.off(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
  10. cc.systemEvent.off(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this);
  11. },
  12. onKeyDown: function (event) {
  13. switch(event.keyCode) {
  14. case cc.macro.KEY.a:
  15. console.log('Press a key');
  16. break;
  17. }
  18. },
  19. onKeyUp: function (event) {
  20. switch(event.keyCode) {
  21. case cc.macro.KEY.a:
  22. console.log('release a key');
  23. break;
  24. }
  25. }
  26. });

设备重力传感事件

  • 事件监听器类型:cc.SystemEvent.EventType.DEVICEMOTION
  • 事件触发后的回调函数:
    • 自定义回调函数:callback(event);;
  • 回调参数:
  1. cc.Class({
  2. extends: cc.Component,
  3. onLoad () {
  4. // open Accelerometer
  5. cc.systemEvent.setAccelerometerEnabled(true);
  6. cc.systemEvent.on(cc.SystemEvent.EventType.DEVICEMOTION, this.onDeviceMotionEvent, this);
  7. },
  8. onDestroy () {
  9. cc.systemEvent.off(cc.SystemEvent.EventType.DEVICEMOTION, this.onDeviceMotionEvent, this);
  10. },
  11. onDeviceMotionEvent (event) {
  12. cc.log(event.acc.x + " " + event.acc.y);
  13. },
  14. });

完整范例可参考 官方范例 cases03_gameplay/01_player_control 目录(这里包含了键盘、重力感应、单点触摸、多点触摸的范例)。