1. 程式人生 > >Getting started with Processing 示例11-9 追隨滑鼠移動

Getting started with Processing 示例11-9 追隨滑鼠移動

程式片段

int num = 60;
int[] x = new int[num];
int[] y = new int[num];

void setup(){
size(240,120);
noStroke();
}

void draw(){
background(0);
//from back to from copy the array
for(int i = x.length-1;i>0;i--){
x[i] = x[i-1];
y[i] = y[i-1];
}
x[0] = mouseX;//set the first element
y[0] = mouseY;//set the first element
for(int i = 0;i<x.length;i++){
fill(i*4);
ellipse(x[i],y[i],40,40);
}
}

 

 

程式程序

首先程式中並沒有對陣列進行初始化,所以一開始的迴圈中,即 for(int i=x.length-1;i>0;i--)每一個數組中的元素都是隨機數。
然後對x[0]進行賦值,即將現在的座標值 mouseX 和 mouseY 賦值給 x[0],
然後執行下一個for 迴圈語句,這個時候,儲存的資料的顯示值並沒有實際的意義。

當程式進行下一次 draw() 的時候,這個時候,首先 x[0] 有了新的值,然後 x[1] 也有了確定的數值。

如此迴圈下去,六十次的程式進行下去之後,x[60]中每一個元素都有了數值。

然後繼續進行程式的時候,新的 x[0] 不斷被賦值,並且 最後一個 陣列元素被前一個元素賦值,這裡因為陣列的長度是一定的

,所以就相當於最後一個元素被丟棄,然後進入一個新的元素,即當前的 mouseX 值和 mouseY 值,然後程式不斷進行下去。

從 fill(i*4);這一條語句可以看出,當前滑鼠所畫出的圓的顏色比較暗淡,但是在起初畫的圓的顏色比較明亮。

總結:

首先,先填充整個陣列,方式是在執行迴圈之後不斷的對 x[0] 的賦值,那麼想一下,能不能先進行賦值然後再進行對陣列進行迴圈呢,我認為是可以的。

當填滿這個陣列之後,然後不斷利用陣列長度的有限性,不斷進行丟棄舊的陣列元素,進入新的陣列元素,通過另外一個 for()迴圈在螢幕上顯示出來其路徑。