2016-07-19 6 views
0
for (int i = 0; i < 50; i++){ 
     noStroke(); 
     fill(50,50,50); 
     rect(0,0,100,100,i); 
     System.out.println(i); 
     delay(100); 
    } 

これはforループで、0から50までの数字を書いて長方形を描きます。目標は、隅に半径の増加する矩形を描くことです。 rect()は実行しませんが、System.out.println();を実行します。これはJavaの処理で書かれています。forループは長方形を描きませんが、コンソールに書き込みます

+5

あなたは[MCVE]の代わりに切断スニペットのを提供していただけますか? –

+0

塗りつぶしの色のために半径の違いを判別できないことがありますか? –

+0

'公共ボイドセットアップ(){ \t} \t \t公共ボイド設定(){ \t \tサイズ(800600)。 \t} \t公共ボイドドロー(){ \t \t(I = 0 int型、iが50 <; I ++の)のために{ \t \t \tストローク(100,0,0)。 \t \t \t fill(50,50,50); \t \t \t rect(0,0,100,100、i); \t \t \t System.out.println(i); \t \t \t遅延(100);予想通り、それがループを終了して一つだけの四角形を描画し、 \t \t} \tは} '私はこれにそれを変更し、それはまだ動作していません。 –

答えて

2

delay()関数を使用してアニメーションを作成しないでください。

draw()関数が終了するまで(またはdraw()関数を使用していない場合は、コードが終了するまで)何も画面に表示されません。すべてがオフスクリーンバッファーに描画され、draw()関数が終了すると、バッファーは一度にすべて画面に描画されます。

だから、本当にそうで、オフスクリーンバッファに四角形を描画する100ミリ秒を待って、オフスクリーンバッファに別の四角形を描画し、100ミリ秒を待って、別の四角形を描画し、しています。待っているすべての作業が完了するまで、実際に画面上に何も表示されません。

アニメーションを作成する場合は、ループを使用しないでください。代わりにdraw()関数をインクリメントするスケッチレベルの変数とともに使用するか、定義済みのframeCount変数を使用してください。

別の問題は、同じ色の矩形を何度も何度も繰り返し描画していることです。灰色の四角形を描画し、その上に少し小さい灰色の四角形を描画し、その上にやや小さな四角形を描画します。したがって、描画する最初の矩形にブレンドされるので、実際には小さい方の矩形が表示されることはありません。

を実行し、より良い何が起こっているのかを理解するには、このプログラム:

noStroke(); 
fill(50,50,50); 
rect(0,0,100,100,0); 
fill(255, 0, 0); 
rect(0,0,100,100,10); 
fill(0, 255, 0); 
rect(0,0,100,100,20); 
+0

ありがとう、私はdraw()関数がそのように機能していることに気づいていませんでした。 –

+0

@ByronLathi問題ありません。 'draw()'関数はこのように動作します。なぜなら、Processingは[double buffering](https://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics)と呼ばれるものを使用しているため、ちらつきや破損などの問題を防ぐことができます。この方法でうまくいかなかったら、物事はかなり醜いものになるでしょう! –

+0

非常に有益です。 – user2277872

関連する問題