2017-06-07 8 views
0

私はProcessing.jsを使用してペイントアプリケーションに取り組んでいます。基本的には、マウスをドラッグするとmouseXmouseYdata[]というオブジェクトの配列に保存されます。その後、paint()関数は、data[]配列のすべてのオブジェクトにアクセスするループを実行し、対応するdata[i].mouseX and data[i].mouseY座標の間にcolor(data[i].R,data[i].G,data[i].B)と厚さdata[i].Tの線を描画します。問題は、描画するほど配列が大きくなり続け、私の場合はdata[]配列の長さが〜800要素に達すると遅延が始まり、描画を続けるほど悪化し続けるということです。遅れを修正する微調整や、プログラムを完全に再考する必要はありますか?このJavascriptコードをペイントアプリケーションに最適化するにはどうすればよいですか?

<!DOCTYPE HTML> 
 
<html> 
 
\t <head> 
 
\t <script src="https://github.com/downloads/processing-js/processing-js/processing-1.4.1.min.js"></script>  
 
    <script type="text/processing" data-processing-target="targetcanvas"> 
 
void setup() { 
 
    size(649, 600); 
 
} 
 
background(255,255,255); 
 
var r=0; 
 
var g=0; 
 
var b=0; 
 
var data = []; 
 
var mousex; 
 
var mousey; 
 
var thickness=31; 
 
var painting = false; 
 
var counter=0; 
 
var x; 
 
var paint = function() { 
 
    background(255, 255, 255); 
 
    for(var i=1;i<data.length;i++){ 
 
     if (data[i-1].mousex && data[i].mousex) { 
 
\t \t  strokeWeight(data[i].T); 
 
\t \t  stroke(data[i].R, data[i].G, data[i].B); 
 
      line(data[i].mousex,data[i].mousey,data[i-1].mousex,data[i-1].mousey); 
 
\t \t \t fill(0,0,0); 
 
\t \t \t text(data.length,10,10); 
 
     } 
 
    }; 
 
}; 
 
mouseDragged = function(){ 
 
    painting = true; 
 
    data.push({mousex: mouseX, mousey: mouseY, R:r, G:g, B:b, T:thickness}); 
 
    paint(); 
 
    counter++; 
 
}; 
 
mouseReleased = function() { 
 
    x=counter; 
 
    counter=0; 
 
    if(painting) { 
 
     data.push({mousex: 0, mousey: 0}); 
 
    } 
 
    painting = false; 
 
}; 
 
mouseOut = function() { 
 
data.push({mousex: 0, mousey: 0}); 
 
} 
 
</script> 
 
\t <center> 
 
     <canvas id="targetcanvas"width="649" height="600" " style="border: 3px solid black; margin-top=100px;"></canvas> 
 
\t </center> 
 
    </body> 
 
</html>

+0

Chromeで開きます。 –

+0

ドライブ上でリンクするだけでなく、コードを共有することもできます。http://jsbin.com/piraniyuzu/edit?html,output –

+0

または、スニペットを作成します。私は他のユーザーのGoogleドライブ –

答えて

0

このProcessing.jsまたはP5.jsですか?いずれにしても、答えは同じです。ユーザーが何かをする時はいつでもちょうどキャンバスにそれらを直接描画し、データ構造内代わりにあなたの形状を記憶させるやその他もろもろ:

ませんデータ構造、無アンドゥ:

は、基本的にはオプションのスペクトルを有します。 PGraphicsキャンバスを使用するか、background()への呼び出しを取り除くと、画面に直接描画することができます。次に、データ構造は必要ありません。これの欠点は、一度描かれると形を取り除くことができないことです。

いくつかのデータ構造、いくつかの元に戻す:いくつかの形状を元に戻す必要がある場合は、それらのすべてを元に戻す必要がある場合は、上記の方法と現在の方法を組み合わせることができます。データ構造にすべてを格納する代わりに、最後の1〜10程度の形状しか保存しません。残りの形状は、バッファーPGraphicsに直接描画されます。データ構造の

ロット、アンドゥの多くは:あなたが本当に図形のすべてを元に戻すことができるように必要な場合、あなたはまだPGraphicsアプローチを使用することができますが、何かが削除された場合にのみ形状の全てを再描画します。

関連する問題