Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Faço tudo como na Aula mas insiste a mensagem de erro

Boa noite, estou fazendo tudo como pede a Aula seguindo passo a passo do professor, mas quando vou executar o jogo aparece essa mensagem de erro no console do navegador e o jogo não e executado, já ate copiei o mesmo código que o professor disponibiliza na aula, mas insiste a mesma mensagem de erro

Uncaught TypeError: cc.SystemEvent.on is not a function
    at jogador.onLoad (jogador.js:20)
    at CCClass.eval [as _invoke] (eval at createInvokeImpl (component-scheduler.js:255), <anonymous>:3:65)
    at CCClass.invoke (component-scheduler.js:153)
    at CCClass.activateNode (node-activator.js:226)
    at cc_Scene._activate (CCScene.js:96)
    at TheClass.runSceneImmediate (CCDirector.js:615)
    at boot.js:378
    at CCLoader.<anonymous> (CCAssetLibrary.js:244)
    at CCLoader.js:255
    at utils.js:87
4 respostas

Bom dia Vlando, tudo bom?

Você consegue mandar um link com o código completo da classe jogador? Assim posso tentar encontrar o erro junto com você.

De qualquer maneira eu imagino que o problema seja uma letra maiúscula. Veja que na linha:

cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.teclaPressionada, this);

o primeiro cc.systemEvent tem o "s" minusculo enquanto que o segundo tem o "S" maiúsculo.

Esse é um problema da Cocos que eu espero que eles resolvam em novas versões. Se não for isso, me manda o código completo (pode ser até por Git se quiser) e a versão da Cocos que você está usando.

Boa noite, segue código.

cc.Class({
    extends: cc.Component,

    properties: {
        // foo: {
        //    default: null,      // The default value will be used only when the component attaching
        //                           to a node for the first time
        //    url: cc.Texture2D,  // optional, default is typeof default
        //    serializable: true, // optional, default is true
        //    visible: true,      // optional, default is true
        //    displayName: 'Foo', // optional
        //    readonly: false,    // optional, default is false
        // },
        // ...
        _acelerando: false,
    },

    // use this for initialization
    onLoad: function () {
        cc.SystemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.teclaPressionada, this);
        cc.SystemEvent.on(cc.SystemEvent.EventType.KEY_UP, this.teclaSolta, this);
    },

    teclaPressionada: function(event){
        if(event.keyCode == cc.KEY.a){
            this._acelerando = true;
        }
    },

    teclaSolta: function(event){
        if(event.keyCode == cc.KEY.a){
            this._acelerando = false;
        }
    },

    // called every frame, uncomment this function to activate update callback
    update: function (dt) {
        if(this._acelerando){
            this.node.x += 1;
        }
    },
});
solução

Realmente no método onLoad vc começa com cc.SystemEvent com o "s" maiúsculo.

Deixa ele minusculo que deve resolver.

onLoad: function () {
        cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.teclaPressionada, this);
        cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, this.teclaSolta, this);
    },

Muito Obrigado Instrutor, nem tinha reparado nessa questão, erros simples mas que nos complicam, essa e a arte da programação, mais uma vez obrigado.