请问这两者有啥区别?

cc.Class({
extends: cc.Component,
onLoad: function () {
// add key down and key up event
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this);
},

onDestroy () {
    cc.systemEvent.off(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
    cc.systemEvent.off(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this);
},

onKeyDown: function (event) {
    switch(event.keyCode) {
        case cc.KEY.a:
            console.log('Press a key');
            break;
    }
},

onKeyUp: function (event) {
    switch(event.keyCode) {
        case cc.KEY.a:
            console.log('release a key');
            break;
    }
}

});

setInputControl: function() {
var self = this;
// 添加键盘事件监听
cc.eventManager.addListener({
event: cc.EventListener.KEYBOARD,
// 有按键按下时,判断是否是我们指定的方向控制键,并设置向对应方向加速
onKeyPressed: function(keyCode, event) {
switch (keyCode) {
case cc.KEY.a:
self.ba = 1;
break;
case cc.KEY.s:
self.bs = 1;
break;
case cc.KEY.d:
self.bd = 1;
break;
case cc.KEY.w:
self.bw = 1;
break;
}
},
// 松开按键时,停止向该方向的加速
onKeyReleased: function(keyCode, event) {
switch (keyCode) {
case cc.KEY.a:
self.ba = 0;
break;
case cc.KEY.s:
self.bs = 0;
break;
case cc.KEY.d:
self.bd = 0;
break;
case cc.KEY.w:
self.bw = 0;
break;
}
}
}, self.node);
},

有啥区别?做PC游戏哪种效率更好?

游戏里面是不是不建议用
cc.eventManager.addListener({
event: cc.EventListener.KEYBOARD,

??

下面这种写法不推荐,因为以后可能会废除掉,建议还是用 cc.systemEvent.on

  cc.eventManager.addListener()

能说下这两者滴区别吗?还有为啥cc.eventManager.addListener()要废除掉?非常感谢~

是 Creator 的架构设计原因,以前的 eventManager 只能应付简单的派发需求,不包含捕获和冒泡事件模型,不支持 hit test,并且实现过于臃肿。所以在 Creator 中,我们只把 eventManager 当作系统事件(touch / mouse / keyboard / acceleration)的代理,不开放作为用户接口。对于用户,我们通过 Node / SystemEvent 两个类封装的事件模型来支持。

以上是系统事件,对于自定义事件,我们也将 eventManager 这种集约式的事件派发机制修改为多个 EventTarget 这样的分布式事件派发机制,每个 EventTarget 对象(Node 也是 EventTarget)负责派发自己的事件,并且实现上更简单高效。

所以为了接口的统一性,eventManager 不适合再开放给用户,会给用户造成使用上的困惑