2016-10-19 78 views
0

我只是不明白爲什麼我的draw函數是未定義的。它與原型有關。從本質上講,我希望每個新創建的對象都有自己的x,y,dx和dy,這樣我就可以使用對象創建多個彈跳球了,我想通過使用原型爲每個對象創建方法將是一種有效的方法。JavaScript - 原型方法未定義

document.addEventListener("DOMContentLoaded", function(event){ 
var canvas, 
    context, 
    altezza, 
    larghezza, 
    x = 100, 
    y = 100, 
    raggio = 25, 
    dx = 5, 
    dy = 5, 
    immagine, 
    ballTest; 

    window.onload = init; 

    //Assegniamo a canvas l'elemento HTML canvas 
    canvas = document.getElementById("campo"); 
    //Assegniamo a context un oggetto che contiene tutti i metodi per disegnare 
    context = canvas.getContext("2d"); 
    //Assegniamo a "dy" una velocità iniziale di 0.1 che verrà incrementato nel tempo 
    dy = 0.1; 
    //Assegniamo a immagine l'immagine della sfera 
    immagine = new Image; 
    immagine.src = "tBall.png"; 
    //Assegniamo alle variabli altezza e larghezza le dimensioni del campo 
    larghezza = window.screen.availWidth - 40; 
    altezza = window.screen.availHeight - 120; 

    function Entity(x, y, raggio){ 
     this.x = x; 
     this.y = y; 
     this.raggio = raggio; 
     draw(); 
    } 

    Entity.prototype.draw = function(){ 
     context.clearRect(0, 0, context.canvas.width, context.canvas,length); 
     context.drawImage(immagine, x, y, raggio, raggio); 
    }; 

    //MIGHT NEED TO PUT THIS.X AND THIS.Y 
    Entity.prototype.move = function(dx, dy){ 
     if(this.x < -10 || this.x > larghezza - 20){ 
      dx *= -1; 
     } 
     if(this.y < 20 || this.y > altezza - 40){ 
      dy *= -1; 
     } 

     this.x += dx; 
     this.y += dy; 
    }; 

    function init(){ 
     //Assegniamo a canvas l'elemento HTML canvas 
     canvas = document.getElementById("campo"); 
     //Assegniamo a context un oggetto che contiene tutti i metodi per disegnare 
     context = canvas.getContext("2d"); 
     //Settiamo le dimensioni del campo di canvas 
     context.canvas.width = larghezza; 
     context.canvas.height = altezza; 
     //Inizializziamo l'entità 
     ballTest = new Entity(100, 100, 25); 
     setInterval(ballTest.move.bind(dx, dy), 10); 
    } 
}); 

錯誤:未捕獲的ReferenceError:平局是沒有定義

+1

@mplungjan'bind'返回一個函數,所以它會被傳遞罰款給setInterval,但第一個參數似乎是錯誤的,因爲它應該是'this'方面進行綁定。 – pawel

+0

@mplungjan怎麼沒有綁定? –

+0

請發佈一個完整的錯誤日誌 – Karim

回答

0

draw功能是在Entity原型所以Entity類中,你必須訪問它爲this.draw()

function Entity(x, y, raggio){ 
     this.x = x; 
     this.y = y; 
     this.raggio = raggio; 
     this.draw(); 
    } 
+0

非常感謝你! :) –

相關問題