如何清除画布中圆圈的前一个位置?

问题描述:

我想使用JavaScript的画布做傍。如何清除画布中圆圈的前一个位置?

我做了任何游戏已经很多年了,因此我相当初学。

我有一个问题,我试图移动球(只是它的X位置,现在),并试图删除其以前的位置。我使用的代码为桨(向上和向下键移动它)工作。

但是,它似乎并不想与球一起工作。

我在做什么错?

this.draw = function() { 
    ctx.clearRect(this.prevX - this.radius, this.prevY - this.radius, this.radius * 2, this.radius * 2); 

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

    this.prevX = this.x; 
    this.prevY = this.y; 
} 

jsFiddle

我知道我使用的是clearRect(),但我的印象只是删除了画布的矩形部分。

clearRect(x,y,width,height):清除指定区域,并使其完全透明

Source

随意给我任何其他提示,因为我几乎是一个初学者与此。

这实际上是因为你没有调用beginPath,所以你绘制的每个新的圆也重绘所有的旧圆圈!

修复这里说明:

http://jsfiddle.net/UvGVb/15/

取出调用beginPath看看发生了什么之前发生的事情。

+0

我知道我错过了一些东西!非常感谢! :) – alex 2011-04-27 23:20:07

我不是帆布专家,所以我会跟着“其他技巧太”的恳求。 :-)如果你离开画布,而是使用像div这样的html元素来绘制你的划桨和球,那么你就不必费心去除,只能移动。然后有很多库可以帮助你进行元素定位,动画等,其中jQuery将是我的第一选择。

+0

感谢您的回答。我故意选择画布,以便我能熟悉它。 :) – alex 2011-04-27 12:43:05

+0

好的,祝你好运! :-) – 2011-04-27 15:05:59

当您渲染球的新位置时,您可能会给“clearrect”函数提供不正确的坐标。有些你引用的“这”看起来像他们可能是狡猾太:

var that = this; 

以上是一个函数里面 - 我认为这是引用“这个”在函数的局部范围,而不是范围球(这是我想你打算的)。如果需要,您可以设置对此(球范围)的引用并使用内部函数内部的引用。

尝试打印出球的坐标以及其以前位置的坐标。然后,您可以确定是否清除画布的正确区域。我也会检查你使用这个关键字,并确保它在你想要做的事情的正确范围内。

我只有一个快速查看,所以我很抱歉,如果我误解了你想要做的。

+0

感谢您的回答。我[试过](http://jsfiddle.net/alexdickson/Y6gWZ/)将'clearRect()'改为'fillRect()',并将它正确定位。所以我不认为是这样。 – alex 2011-04-27 12:48:33

+0

clearRect()之后是否还有其他事情发生,可能会在画布区域被清除后覆盖该区域? – 2011-04-27 12:49:41

+0

我不这么认为,但是再一次,我是一个画布新手,所以我不是100%确定。 – alex 2011-04-27 12:51:15