当t与MDN类似时,为什么我的代码不能正常工作? (OOP)

时间:2015-10-11 06:41:35

标签: javascript oop

这是MDN的球速代码:

var ball = {
  x: 100,
  y: 100,
  vx: 5,
  vy: 2,
  radius: 25,
  color: 'blue',
  draw: function() {
    ctx.beginPath();
    ctx.arc(this.x, this.y, this.radius, 0, Math.PI*2, true);
    ctx.closePath();
    ctx.fillStyle = this.color;
    ctx.fill();
  }
};

function draw() {
  ctx.clearRect(0,0, canvas.width, canvas.height);
  ball.draw();
  ball.x += ball.vx;
  ball.y += ball.vy;
  raf = window.requestAnimationFrame(draw);
};

canvas.addEventListener('mouseover', function(e){
  raf = window.requestAnimationFrame(draw);
});

ball.draw();

我的代码在这里:

var Ball = function(x, y, vx, vy, r, color) {
  this.x = x;
  this.y = y;
  this.vx = vx;
  this.vy = vy;
  this.radius = r;
  this.color = color;
  this.draw = function() {
    ctx.beginPath();
    ctx.arc(x, y, r, 0, Math.PI * 2, true);
    ctx.closePath();
    ctx.fillStyle = color;
    ctx.fill();
  }
};

function movement() {
  pingPong.draw();
  pingPong.x += pingPong.vx;
  pingPong.y += pingPong.vy;
  raf = window.requestAnimationFrame(movement);
};

canvas.addEventListener('mouseover', function(e){
  raf = window.requestAnimationFrame(movement);
});

var pingPong = new Ball(100, 100, 5, 1, 15, 'black');

pingPong.draw();

我无法理解为什么我的球没有被重新绘制。对我来说,他们看起来完全一样,我有console.log' d我的x和y坐标,他们正在更新它们应该是。谁能告诉我为什么我的工作不起作用?

1 个答案:

答案 0 :(得分:0)

MDN的

ctx.arc(this.x, this.y, this.radius, 0, Math.PI*2, true);
ctx.closePath();
ctx.fillStyle = this.color;

此致

ctx.arc(x, y, r, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fillStyle = color;

在您的代码中,您没有使用this.作为前缀,这可能会使您的对象没有颜色并被放置在屏幕之外。