[英]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 種顏色,然后繪制所有方塊……如果您可以暫停閃爍的方塊,您會看到它們的顏色相同。 所以這里有兩件事需要解決:
在draw
顏色后停止draw
循環(停止循環或確保顏色不會在循環的每次迭代中改變)。
確保在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.