场景2切回场景1后再次切回场景2后,键盘输入事件就失效了

新手小白刚接触creator几天,望指教…
模仿着教程(就是那个kingrun)做了一个跑酷的demo,当触碰到导弹当时候会回到主界面场景1,点击按钮回到游戏
界面场景2之后,键盘输入当事件就失效了。正常第一次加载是一切正常的…
chrome上当报错是这样写的…
Uncaught TypeError: Cannot read property ‘getComponent’ of null
at SystemEvent. (Game2.js:39)
at EventListeners.111.EventListeners.invoke (event-listeners.js:48)
at _doDispatchEvent (event-target.js:70)
at SystemEvent.112.proto.dispatchEvent (event-target.js:403)
at TheClass.onKeyReleased (system-event.js:131)
at TheClass._callback (CCEventListener.js:537)
at _onListenerCallback (CCEventManager.js:1077)
at Object._dispatchEventToListeners (CCEventManager.js:640)
at Object.dispatchEvent (CCEventManager.js:1068)
at HTMLCanvasElement. (CCInputExtension.js:74)

然后百度了一下,之前有人在cocos2d中提到需要在切换场景的时候注销掉键盘监听事件?

我也遇到过。试了几次,解决方法: 将键盘监听对象用变量保存使用(原理解释不来。。不要问我);如
setInputControl: function() {
var self = this;
var King = self.king.getComponent(‘king’)
// W 跳,S 蹲
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, function(event) {
switch(event.keyCode) {
case cc.KEY.w :
King.jump(); break;
case cc.KEY.s :
King.down(); break;
}
});
// W 松开恢复跑的状态
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, function(event) {
if(event.keyCode === cc.KEY.s) {
King.downRelease();
}
});
},
onLoad: function() {
this.setInputControl();
}

非常感谢… 确实是用你的方法就ok了…

大家都是新手互相帮助啊