2014-11-20 84 views
0

我正在做一個遊戲,但有一些麻煩。 我創建了三個類:Player,Block和gameManager。 我遇到了mouse_listener的問題,因爲每次我嘗試調用循環,指令或信用時,它都會給我一個Uncaught錯誤,指出undefined不是一個函數。 我如何繞過它?麻煩參考這個和功能:未定義不是功能

function gameManager() { 
       this.clear = function() { 
        ctx.clearRect(0, 0, canvas.width, canvas.height); 
       } 

       this.update = function() { 
        ctx.drawImage(game_background, 0, game_background.vy); 
        ctx.drawImage(game_background, 0, 800-Math.abs(game_background.vy)); 

        if (Math.abs(game_background.vy) > 800) { 
         game_background.vy = 0; 
        } 

        ctx.font = "bold 20px Arial"; 
        ctx.fillText("Score: " + score, 0, 20); 
        ctx.fillText("Highscore: "+ high_score, 420, 20); 
        for (var i=0; i<blocks.length; i++) { 
         player.update(blocks[i]); 
         blocks[i].update(); 
        } 
       } 

       this.draw = function() { 
        player.draw(); 
        for (var i=0; i<blocks.length; i++) { 
         blocks[i].draw(); 
        } 
       } 

       this.loop = function() { 
        (function loop() { 
         this.clear(); 
         this.update(); 
         this.draw(); 
         setTimeout(loop, 60)})(); 
        } 

       this.setup = function() { 
        this.clear(); 
        ctx.drawImage(menu_background, 0, 0); 
        ctx.drawImage(play_button, 150, 170); 
        ctx.drawImage(instruction_button, 150, 290); 
        ctx.drawImage(credit_button, 150, 410); 
       } 

       this.instruction = function() { 
        this.clear(); 
        //ctx.drawImage(instruction_background, 0, 0); 
       } 

       this.gameover = function() { 
        this.clear(); 
        ctx.drawImage(gameover_retry, 0, 0); 
       } 

       this.mouse_listener = function (e) { 
        console.log("x: " + e.clientX); 
        console.log("y: " + e.clientY); 
        if (e.clientX >= 164 && e.clientX <= 460 && e.clientY >= 180 && e.clientY <= 220) { 
         this.loop(); 
        } else if (e.clientX >= 164 && e.clientX <= 460 && e.clientY >= 300 && e.clientY <= 340) { 
         this.instruction(); 
        } else if (e.clientX >= 164 && e.clientX <= 460 && e.clientY >= 410 && e.clientY <= 460) { 
         this.credit(); 
        } 
       } 

       this.keyboard_listener = function (e) { 
        console.log(e.keyCode); 
        switch (e.keyCode) { 
        case 39: 
         player.x += player.vx; 
         break; 
        case 37: 
         player.x -= player.vx; 
         break; 
        case 82: 
         location.reload(); 
        } 
       } 
       return this; 
      } 
gm = new gameManager(); 
    document.addEventListener("mousedown", gm.mouse_listener, false); 
+1

檢查:http://stackoverflow.com/questions/962033/what-underlies-this-javascript-idiom-var-self-this/ – gpojd 2014-11-20 18:45:29

+0

感謝。我不知道自我。 – ovrwngtvity 2014-11-20 19:39:01

回答

0

嘗試

document.addEventListener("mousedown", gm.mouse_listener.bind(gm), false); 
+0

謝謝。我認爲它與自我一起工作。 – ovrwngtvity 2014-11-20 19:39:33