cocos2d-html5 启动获取焦点的问题

目前我在使用cocos2d-html5V2.0开发一个在机顶盒上运行的游戏,一进入游戏的时候需要捕获用户的按键操作(用遥控器),发现一个问题就是一开始的时候第一次按键的时候没办法接受到按键,必须第二次按键才能够正常的接受按键事件。如果我直接用浏览器打开的时候,执行键盘按键的时候无响应,需要用鼠标点击页面才能够接受按键操作。

我用的是cocos2d-html5-V2.0-min.js
开发工具用的webstrom

好老的版本了。

@panda 新版本反馈也有同样的问题。

我写了一个简单的测试,这个直接用浏览器打开的时候,在执行键盘的上下左右键时无反应,必须点击下页面,在执行上下左右才开始接受事件

var TestKeyBoard = cc.Scene.extend({

    onEnter:function () {
        this._super();

        this.addChild(testLayer.create());

    }
})


var testLayer = cc.Layer.extend({

    init : function(){
        this._super();

        this.setEvent();

        console.log("11111111")

        return true;
    },

    setEvent : function()
    {
        var t = cc.config.deviceType;
        if( t == 'browser' )  {
            this.setTouchEnabled(true);
            this.setKeyboardEnabled(true);

            console.log("2222222222")
        } else if( t == 'desktop' ) {
            this.setMouseEnabled(true);
        } else if( t == 'mobile' ) {
            this.setTouchEnabled(true);
        }
    },

    onKeyDown:function (e) {
        console.log("========bbb=======" + e)
    },

    onKeyUp:function (e) {
        console.log("===============" + e)
    },


})


testLayer.create = function()
{
    var sg = new testLayer();
    if(sg && sg.init())
    {
        return sg;
    }

    return null;
}

隐约记得浏览器打开的测试的时候就是先要按一下,第二下才会有效果,记得论坛去年还是前年说过这个问题,不知道现在的版本怎么弄的

这个很简单啊,用 focus 应该可以解决吧?

在进入页面的时候,调用

cc.game.canvas.focus();

这个是 3.x 的接口,如果是 2.x 可以使用 document.getElementById('CanvasId').focus();

参考:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus

1赞

感谢panda的回答,问题解决了。开始我也想到了用设置focus的方式来解决,不过我前面是把这个调用放到了index.html里面的script里面和在main.js和cocos2d.js中设置的,没起作用。看到您的回复,我把这个放到主场景的初始化里面,成功了。一进来就可以获得焦点了。非常感谢。另外我还有几个问题发布了帖子,希望您能够回复下:http://forum.cocos.com/t/cocos2d-html5/39088