2012-06-12 115 views
0

所以,我剛開始使用JavaScript,並且一切都很好,直到我來到對象。 代碼的這種安寧應該創造一個JavaScript的HTML畫布中的彈跳球,但它不起作用。訪問javascript中的對象變量

var canvas = document.getElementById("myCanvas"); 
    var ctx = canvas.getContext("2d"); 

//clear 

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

這裏是我的球對象

//ball 

var ball = { 

x: canvas.width/2, 
getX: function() { 
    return this.x; 
}, 
setX: function(a) { 
    this.x = a; 
}, 

y: canvas.height/2, 
getY: function() { 
    return this.y; 
}, 
setY: function(a) { 
    this.y = a; 
}, 

mx: 2, 
getMx: function() { 
    return this.mx; 
}, 
setMx: function(a) { 
    this.my = a; 
}, 
my: 4, 

getMy: function() { 
    return this.my; 
}, 

setMy: function(a) { 
    this.my = a; 
}, 
r: 10, 
getR: function() { 
    return this.r; 
} 

};

代碼繪製我的球

function drawBall() 
{ 
    ctx.beginPath(); 
    ctx.arc(ball.getX, ball.getY, ball.getR, 0, Math.PI * 2, true); 
    ctx.fillStyle = "#83F52C"; 
    ctx.fill(); 

} 

function circle(x, y, r) { 
    ctx.beginPath(); 
    ctx.arc(x, y, r, 0, Math.PI * 2, true); 
    ctx.fillStyle = "#83F52C"; 
    ctx.fill(); 
} 
//draws ball and updates x,y cords 
function draw() { 
    clear(); 
    drawBall(); 
    if (ball.getX() + ball.getMx() >= canvas.width || ball.getX()+ ball.getMx() <= 0) { 
     ball.setMx(-ball.getMx()); 
    } 
    if (ball.getY() + ball.getMy() >= canvas.height|| ball.getY()+ ball.getMy() <= 0) { 
     ball.setMy(-ball.getMy()); 
    } 

    ball.setX(ball.getX() + ball.getMx()); 
    ball.setY(ball.getY() + ball.getMy()); 

} 

設定間隔

function init() { 
    return setInterval(draw, 10); 
} 

init(); 
+0

我認爲你確定你有在HTML中的畫布? – Alex

回答

2

使用this引用在其上調用方法的對象的屬性。

var ball = { 

    x: canvas.width/2, 
    getX: function() { 
     return this.x; 
    }, 
    setX: function(a) { 
     this.x = a; 
    }, 

    y: canvas.height/2, 
    getY: function() { 
     return this.y; 
    }, 
    setY: function(a) { 
     this.y = a; 
    }, 

    mx: 2, 
    getMx: function() { 
     return this.mx; 
    }, 
    my: 4, 
    getMy: function() { 
     return this.my; 
    }, 
    r: 10, 
    getR: function() { 
     return this.r; 
    } 
}; 

此外,要調用方法,您需要使用()

ctx.arc(ball.getX(), ball.getY(), ball.getR(), 0, Math.PI * 2, true); 

否則,你傳遞的方法,而不是調用該方法的結果。

+0

它現在有效,謝謝 – user1452370

+0

@ user1452370:不客氣。 – 2012-06-12 22:48:44