2017-09-06 131 views
2

在不使用多個文件的情況下,使用java中的cos或sin平滑地(以及其他)循環背景顏色的最佳方式是什麼?我嘗試過使用隨機性,並分別增加每個單獨的r,g和b值,以使這看起來有點正常,但它很緊張,不光滑,而且顏色很可怕。現在,它只是純白色。我只包括必要的代碼,我使用的加工3.實現顏色循環背景的最佳方式是什麼?

//background 
int bg1 = 255; //r 
int bg2 = 255; //g 
int bg3 = 255; //b 

void draw() { 
fill(bg1,bg2,bg3); 
} 

回答

1

你已經得到了普遍的想法了。這是一個三個步驟:

  • 第1步:在草圖的頂部聲明變量。
  • 第2步:使用這些變量繪製場景。
  • 第3步:隨時間變化這些變量。

這是在Processing中創建任何動畫的基本方法。 Here是一個包含更多信息的教程。

這裏是一個小例子,顯示了窗口之間的週期白色和黑色:

float c = 0; 

float cChange = 1; 

void draw(){ 

    background(c); 

    c += cChange; 
    if(c < 0 || c > 255){ 
    cChange *= -1; 
    } 
} 

您需要做同樣的事情,但有3個顏色值,而不是1。注意,我只是很每次改變顏色少量,這使它看起來平滑而不是緊張。

如果您仍然遇到問題,請在新問題中發佈更新後的MCVE,我們將從此處繼續。祝你好運。

+0

謝謝。它適用於一些調整! – Icy4614

-1

不明白你的意思是因爲cos和sin與背景顏色有關。但是,也許這樣的事情是你想要的?

void draw(){ 
int H = frameCount%1536; 
background(color(abs(H-765)-256,512-abs(H-512),512-abs(H-1024))); 
} 
1

如果你特別想使用正弦波作爲輸入,而不是鋸齒波,那麼你需要你的輸入(例如,時間)映射到某個色彩範圍。例如:

  1. 從0每2000毫秒值增加到2.0
  2. 值範圍從-1到1
  3. SIN(值)的輸出範圍從-1到1
  4. 地圖輸出到一個顏色範圍。

​​行之有效的映射值,但你也可以使用colorMode()映射的顏色範圍 - 因此而不是四處移動你的正弦輸出值,只是讓你的輸出0-2.0並設置最大RGB或HSB值到2.0,而不是255

這裏有一些例子,都在同一個草圖同時運行:

float val; 
float out; 

void draw() { 
    background(0); 
    val = TWO_PI * (millis()%2000)/2000.0; // every 2000 milliseconds value increases from 0 to 2PI 
    out = sin(val); 

    // white-black (256-0) 
    pushStyle(); 
    fill(128 + 128*out); 
    rect(0,0,50,50); 
    popStyle(); 

    // red-black (255-0) 
    pushStyle(); 
    colorMode(RGB, 255); 
    fill(255*(out+1), 0, 0); 
    rect(50,0,50,50); 
    popStyle(); 

    // hue rainbow (0-2) 
    pushStyle(); 
    colorMode(HSB, 2.0); 
    fill(out+1, 2, 2); 
    rect(0,50,50,50); 
    popStyle(); 

    // hue blue-green (3 to 5/9) 
    pushStyle(); 
    colorMode(HSB, 9); 
    fill(out+4, 9, 9); 
    rect(50,50,50,50); 
    popStyle(); 

    translate(width/2,height/2 - out * height/2); 
    ellipse(0,0,10,10); 
} 

enter image description here

相關問題