2017-05-02 158 views
0

我正在嘗試沿畫布的y軸和x軸順序繪製幾個橢圓。點在隨機y位置繪製。處理For循環序列

我以前有橢圓隨機沿x軸繪製高度。但是,所有沿y軸的橢圓都是一次繪製的。

for (int x = 0; x < xStep; x++) { 
    int mh = int(map(noise(offset+(x*0.05)), 0, 1, 0, h)); 


    for (int y = mh; y > mh - 3; y--) { 
     ellipse(x*diam, y*diam, diam, diam); 
    } 
    } 
    xStep++; 
    if (xStep > w) { 
    xStep = 0; 
    offset = random(1000); 
    } 

然後,我繼續添加另一個for循環,嘗試沿y軸以及x軸順序排列橢圓。因此,在繪製下一列(x軸)之前,視覺上每個橢圓在y軸上依次繪製。然而,使用下面的代碼,我得到的是y和x軸的「繪圖」,但同時在視覺上看起來並不像一行在下一列繪製之前完成。

//count rows and frames 
    if (counter > 7) { 
    counter = 0; 
    rowCounter++; 
    } 

for (int j=0; j<7; j++) { //set values to match counter 
     if (j == counter){ 

      for (int x = 0; x < xStep; x++) { 
      int mh = int(map(noise(offset+(x*0.05)), 0, 1, 0, h)); 

      for (int y = mh; y > mh - 3; y--) { 
       y=y-j; 
       ellipse(x*diam, y*diam, diam, diam); 

      } 
      } 
     } 
     } 
    xStep++; 

    counter++; 

    if (rowCounter > 7) { 
    rowCounter = 0; 
    } 

    if (xStep > w) { 
    xStep = 0; 
    offset = random(1000); 
    } 

或者,如果我嘗試使用條件的特步我只得到繪製橢圓的一行。

//count rows and frames 
    if (counter > 7) { 
    counter = 0; 
    rowCounter++; 
    } 

    for (int j=0; j<7; j++) { //set values to match counter 
    if ((j == counter) && (xStep != lastXstep)) { 

     for (int x = 0; x < xStep; x++) { 
     int mh = int(map(noise(offset+(x*0.05)), 0, 1, 0, h)); 

     for (int y = mh; y > mh - 3; y--) { 
      y=y-j; 
      ellipse(x*diam, y*diam, diam, diam); 
      xStep=lastXstep; 
     } 
     } 
    } 
    } 

    xStep++; 

    counter++; 

    if (rowCounter > 7) { 
    rowCounter = 0; 
    } 

    if (xStep > w) { 
    xStep = 0; 
    offset = random(1000); 
    } 

任何人都可以幫助指向我的方向,我出錯的for循環結構? 謝謝。

回答

0

請記住,每次調用draw()函數都會繪製一個幀。處理是雙緩衝處理的,因此只有在draw()函數的最後纔會更新屏幕。這就是爲什麼你只看到最終結果而不是中間步驟。如果你想渲染中間步驟,你將不得不將它分成多個幀。你可以通過跟蹤你的程序的狀態在一組變量中,隨着時間的推移改變這些變量,並使用這些變量來繪製每一幀。

無恥自我推銷:here是關於Processing的動畫教程,更詳細地描述了上述方法。