游戏运行在手机浏览器上
- 一点击返回键,就整个页面返回了,有什么办法禁用浏览器的返回响应,且游戏里可以?
- 怎么模拟发送全局键盘事件? emit只能发送给本节点,dispatchEvent只能往父节点传递,有没有办法发送一个全局都可以响应的事件?
游戏运行在手机浏览器上
没办法
var GlobalKeyboardEventDispatcher = new cc.EventTarget();
GlobalKeyboardEventDispatcher.on('keyboard', function () {...});
GlobalKeyboardEventDispatcher.emit('keyboard', keyCode);
多谢panda,不过还是有点出入,想要的效果是:模拟的事件,“所有节点”都有可能响应,按照渲染顺序来,越上面的越优先。就跟通常添加的键盘事件响应那样。
我们的事件系统的基本原则是,只有注册了监听器的对象,才会去分发,所以不会有这种“所有节点”都可以响应的效果,因为检查所有节点或者分发给所有节点(包括其底层的排序)都是有消耗的。
想要得到事件派发,必须手动监听
嗯,你说的没错,我已经在需要监听的节点上添加了以下代码了:
regListener: function () {
cc.eventManager.addListener({
event: cc.EventListener.KEYBOARD,
onKeyPressed: function (keyCode, event) {
switch (keyCode) {
case cc.KEY.back: // back 键
case cc.KEY.backspace: // PC回退键
break;
}
event.stopPropagation();
}
}, this.node);
}
万事俱备,只欠派发
在下尝试过三种办法,引入外部库,可惜没有一个可行的:
一、
YUI().use(‘node-event-simulate’, function (Y) {
Y.one(“body”).simulate(‘keypress’, { charCode: cc.KEY.backspace });
});
二、
jQuery.event.trigger({ type: ‘keypress’, which: cc.KEY.backspace });
三、
var ev = document.createEvent(‘KeyboardEvent’);
ev.initKeyboardEvent(‘keydown’, true, true, window, false, false, false, false, cc.KEY.backspace, 0);
document.body.dispatchEvent(ev);
哦,你是要模拟啊。。。
想要模拟触摸返回按键的操作让浏览器回到主页之类的?
这个我估计是做不到的,物理按键的事件浏览器是自己在原生层监听的,然后派发到 JS 层:
原生层 -> 浏览器 -> JS 层
你最多只能模拟 JS 层的事件,不可能影响到浏览器本身。
JS 层对浏览器的控制力非常非常弱,建议不要从这个角度寻找问题的解决方案
原来如此,多谢panda指点!