簡體   English   中英

使用數組java更改下一次迭代的顏色

[英]Changing colors of next iteration using arrays java

我正在嘗試使用數組進行下一次重復以更改顏色(另外值得注意的是我正在使用處理庫)但它似乎不起作用,我嘗試移動“如果”進入設置,在“繪圖”內的“for”外的“for”內,但顏色似乎在閃爍,這就是我想要實現的目標:有必要使用 for 功能。 在此處輸入圖片說明

public void settings() {
    size(500, 500);
}

int estado;
int[] cuadrados;

@Override
public void setup() {
    
    cuadrados = new int[8];

    /*
     * cuadrados[0]=(estado=0); cuadrados[1]=(estado=1); cuadrados[2]=(estado=2);
     * cuadrados[3]=(estado=3); cuadrados[4]=(estado=4); cuadrados[5]=(estado=5);
     */

    println(estado);
    println(cuadrados);
}

@Override
public void draw() {
    
    
    background(255);
    if (estado == 0) {
        fill(255, 255, 0);
    }
    if (estado == 1) {
        fill(0, 0, 255);
    }
    if (estado == 2) {
        fill(255, 0, 0);
    }
    if (estado == 3) {
        fill(255);
    }
    if (estado == 4) {
        fill(255);
    }
    for (int i = 0; i < 8; i++) {

        cuadrados[i] = estado;

        rect(4 + (i * 62), 200, 55, 55);
        estado += 1;
        if (estado > 4) {
            estado = 0;
        }

    }

}

}

任何幫助表示贊賞,謝謝。

我不確定我的答案,但你可以試試這個,我認為它有效。

while(i<8)
{   switch(estado)
   {
    case 1:
    fill(255,0,0);
    break;
    case 2:
    fill(0,255,0)
    break;
    default:
    draw(); or i = 1;// try using both, Either u set the value to 1 again. or you call 
                     //that function again and again 
    }
}

draw()循環每秒迭代約 60 次,這就是為什么顏色會像瘋狂一樣閃爍:您經常重新繪制它們。 此外,您選擇 1 種顏色,然后繪制所有方塊……如果您可以暫停閃爍的方塊,您會看到它們的顏色相同。 所以這里有兩件事需要解決:

  1. draw顏色后停止draw循環(停止循環或確保顏色不會在循環的每次迭代中改變)。

  2. 確保在for循環內更改顏色,因此每個新方塊都有自己的顏色。

如果您只是繪制這些方塊(並在setup方法中工作),我們實際上可以完全noLoop() draw() 循環,或者在繪制方塊后使用noLoop() 或者,您可以確保每個正方形在繪制時始終具有相同的顏色 - 在某種程度上,您已經這樣做了,因為estado將始終在draw()循環的每次迭代中以相同的方式重置,但是讓我們無論如何手動重置它,以防您稍后更改方塊或顏色的數量。

有很多很多方法可以解決第二點。 我喜歡在輔助方法中隔離像這樣的小邏輯,所以我將你的“顏色選擇”代碼移到了一個函數中,你可以在繪制正方形的for循環中的正確時刻調用該函數,即更改顏色的正確時刻是“在你畫正方形之前”。

這是修改后的代碼:

int estado;
int[] cuadrados;

public void settings() {
  size(500, 500);
}

public void setup() {
  cuadrados = new int[8];

  println(estado);
  println(cuadrados);
}

public void draw() {
  background(255);

  estado = 0; // reseting estado so the colors stays in the same order

  for (int i = 0; i < 8; i++) {
    cuadrados[i] = estado;

    fill(getColor(estado)); //changing the color before we draw a new square
    rect(4 + (i * 62), 200, 55, 55);

    estado += 1;
    if (estado > 4) {
      estado = 0;
    }
  }
}

color getColor(int index) {
  // I'm using a switch because I like switches for this kind of use, but your code would have worked too. It's less efficient, though, hence the switch.
  switch (index) {
  case 0:
    return color(255, 255, 0);
    // Careful here! This switch doesn't need `break;` statements because it makes returns instead, but in any other case I would have needed them!
  case 1:
    return color(0, 0, 255);
  case 2:
    return color(255, 0, 0);
  case 3:
    return color(255);
  case 4:
    return color(255);
  }

  return color(0); // if you get a black square, you know there's something wrong
}

我會留下來,如果您有任何問題,我會盡力提供進一步幫助。

玩得開心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM