Getting started with Processing 示例11-9 追隨滑鼠移動
阿新 • • 發佈:2018-12-19
程式片段
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] 不斷被賦值,並且 最後一個 陣列元素被前一個元素賦值,這裡因為陣列的長度是一定的
從 fill(i*4);這一條語句可以看出,當前滑鼠所畫出的圓的顏色比較暗淡,但是在起初畫的圓的顏色比較明亮。
總結:
首先,先填充整個陣列,方式是在執行迴圈之後不斷的對 x[0] 的賦值,那麼想一下,能不能先進行賦值然後再進行對陣列進行迴圈呢,我認為是可以的。
當填滿這個陣列之後,然後不斷利用陣列長度的有限性,不斷進行丟棄舊的陣列元素,進入新的陣列元素,通過另外一個 for()迴圈在螢幕上顯示出來其路徑。