我有一個HTML5畫布,允許用戶繪製各種形狀和畫筆功能,允許用戶徒手畫。我正在使用這些實現的命令模式。我面臨的問題是「撤消」功能。它適用於所有其他命令,但在涉及「刷」時似乎存在問題。被覆蓋的HTML5畫布圖紙
畫筆的工作方式是每次拖動鼠標時存儲點,一旦添加了一個新點,整個點的陣列就會重新繪製在屏幕上。只有當用戶釋放鼠標時,繪圖纔會停止。您可能會立即看到問題,點越大,他們在屏幕上重繪得越多。這使得線條顏色看起來比實際顏色更深。
我的解決方案是隻將最後一個點n-1與點n-2連接起來,但實際上只會重繪最後2個點。我不完全理解帆布如何工作以及爲什麼這種方法不起作用,但是重繪帆布點似乎很有效......
下面是一些代碼,概述了關鍵部分。
BrushStrat.prototype.mousemove=function(event){
if(this.command!=null){
//add this point to the list
this.command.addPoint({x:event.canvasX, y:event.canvasY});
//redraw all points
this.command.draw(this.paint.context);
}
}
BrushCommand.prototype.draw=function(context){
if(this.points.length==0){
return;
}
context.beginPath();
context.strokeStyle = this.strokeStyle;
context.lineWidth=this.lineWidth;
//start from the first point
context.moveTo(this.points[0].x,this.points[0].y);
//redraw all subsequent points
for(var i=1;i<this.points.length;i++){
context.lineTo(this.points[i].x, this.points[i].y);
}
context.stroke();
}
真棒,這是我實現它的方式這個問題似乎神奇地消失了:所以它的一切都好! – 1337holiday 2013-03-17 01:57:40