2017-09-19 7 views
0

他の要素のためキャンバスをクリアするのを止めるキャンバス上に円が描画されているランダムに生成されますキャンバスをクリアせずに動いている(スジを残す)キャンバスの要素をクリアする方法

var circleX = 50; 
var circleY = 10; 
var moveCircX = 2; 
var moveCircY = 3; 
function createCirc(){ 
    ctx.fillStyle = 'red'; 
    ctx.beginPath(); 
    ctx.arc(circleX, circleY, 10, 0, Math.PI*2, true); 
    ctx.fill(); 

} 
function circMove(){ 
    circleY = (circleY + circMoveY) 
//then validation to stop it from being drawn of the canvas 

私がしようとしているのは、円を移動してキャンバスから前の描画された円をクリアすることです。だからサークルをクリアするための解決策があるのでしょうか、サークルを複製するスプライトを作成する方が簡単でしょうか?

+0

キャンバスの背景が静的か動的かあなたはそれがランダムだと言いましたが、そこにいったん変わるのですか? –

+0

静的ではありません(グリッドは現在キャンバス全体にランダムに描画されていますが、変更されません) –

答えて

0

背景が変化していないので、最も簡単な戦略は、サークルを最初に描画する前に背景をコピーしてからサークルを描画することです。移動するときは、保存したコピーから背景の一部を再描画してから、サークルを新しい場所に描画します。

有効な方法は、getImageDataputImageDataです。初めてごcreateCircする前に

、(私のjavascriptのがさびているので、これは完璧ではないかもしれない間違いを訂正すること自由に感じ。)、単純に実行します。

imageData = ctx.getImageData(0,0, ctx.canvas.width, ctx.canvas.height) 

そして、あなたのcircMove機能であなたが移動して円を再描画する前に、あなたがしたい:

ctx.putImageData(imageData, circleX, circleY, circleX, circleY, 2*circle_radius, 2*circle_radius) 

(あなたはcircle_radiusを定義していませんが、私はあなたが同様の値を持っている必要があります確信している私はおそらくする半径2倍を使用しています。描画される画像のサイズ)

+0

キャンバスをアニメーション化すると(動的なので)、サークルを再描画する方法? –

+0

その場合、それは問題ではありません。各フレームは、動的にキャンバスを生成し、その上に円を描画します。 :-) –

関連する問題