2014-11-21 121 views
0

我想創建一個草圖,顯示主要顏色,然後你控制它的透明度,無論是按鈕或滑塊。我正在使用CntrolP5庫。問題是,無論何時我將透明度變量放入顏色()中,所有事情都會變得混亂起來,甚至不會出現顏色。按鈕的透明度控制

見代碼:

所有的
import controlP5.*; 

ControlP5 cp5; 

int transparency; 
color c = color(0, 160, 25); 
color red; 
color green; 
color blue; 


void setup() { 
    size(400, 600); 
    gui(); 

    red = color(255, 0, 0, transparency); // WHWENEVER I PUT TRASNPARENCY VALUE DOES NOT WORK 
    green = color(0, 255, 0, transparency); 
    blue = color(0, 0, 255, transparency); 
    noStroke(); 
    smooth(); 

    } 
    // create gui 
void gui() { 

    cp5 = new ControlP5(this); 

    // create radio button 


    cp5.addRadioButton("radio") 
    .setPosition(40, 200) 
    .setItemWidth(20) 
    .setItemHeight(20) 
    .addItem("red", 0) 
    .addItem("green", 1) 
    .addItem("blue", 2) 
    .setColorLabel(color(255)) 
    .activate(2) 

    ; 

    cp5.addRadioButton("level") 
    .setPosition(100, 200) 
    .setItemWidth(20) 
    .setItemHeight(20) 
    .addItem("ONE", 0) 
    .addItem("TWO", 1) 
    .addItem("THREE", 2) 
    .addItem("FOUR", 3) 
    .addItem("FIVE", 4) 
    .addItem("SIX", 5) 
    .addItem("SEVEN", 6) 
    .addItem("EIGHT", 7) 
    .addItem("NINE", 8) 
    .addItem("TEN", 9) 
    .setColorLabel(color(255)) 
    .activate(2) 

    ; 

    //add slider bar 


    /* cp5.addSlider("level") 
    .setPosition(60,20) 
    .setSize(100,20) 
    .setRange(0,10) 
    .setValue(5) 
    .setNumberOfTickMarks(11) 
    .setSliderMode(Slider.FLEXIBLE) 
    ;*/ 

} 


void radio(int theC) { 
    switch (theC) { 
    case (0): 
     c = red; 
     break; 
    case (1): 
     c = green; 
     break; 
    case (2): 
     c = blue; 
     break; 

    } 
} 

void level(int theC) { 
    switch (theC) { 
    case (0): 
     transparency = 15; 
     break; 
    case (1): 
     transparency = 13; 
     break; 
    case (2): 
     transparency = 11; 
     break; 
    case (3): 
     transparency = 9; 
     break; 
    case (4): 
     transparency = 7; 
     break; 
    case (5): 
     transparency = 6; 
     break; 
    case (6): 
     transparency = 5; 
     break; 
    case (7): 
     transparency = 4; 
     break; 
    case (8): 
     transparency = 2; 
     break; 
    case (9): 
     transparency = 1; 
     break; 

    } 
} 

void draw() { 
    background(220); 

    fill(c); //fill with color 

    ellipse(200, 400, 100, 100); 

} 

回答

1

您已初始化setup()中的顏色(紅色,綠色,藍色)變量,並且您從不更改它們。如果要更改透明度,則需要將其移入draw(),並且還需要將變量transparency初始化爲某個值。

你也改變顏色,僅當「電臺」按鈕,用戶點擊改進此需要抽象的顏色從邏輯。無線電()

void radio(int theC) { 
    mode = theC; 
} 

哪裏mode是整型變量存儲你的顏色模式。並更新draw()功能:

void draw() { 
    background(220); 

    switch (mode) { 
    case (0): 
     c = color(255, 0, 0, transparency); 
     break; 
    case (1): 
     c = color(0, 255, 0, transparency); 
     break; 
    case (2): 
     c = color(0, 0, 255, transparency); 
     break;  
    } 

    fill(c); //fill with color 
    ellipse(200, 400, 100, 100); 
} 

由於@rlinden正確地提到你也應該更新alpha值0-255。

+0

新人的錯誤...非常感謝我的朋友 – eneko 2014-11-22 10:52:35

1

首先,你的代碼是不完整的。例如,在調用setup()時很難看到。如果它剛剛開始(如設置),那麼您的transparency變量可能具有值0(因爲它未初始化),並且顏色將完全透明。

其次,alpha值應該是0.0到1.0之間的浮點數或0到255之間的整數。在您的情況下,您將透明度值設置得非常低(最高爲15),所以您的顏色將非常透明。嘗試使用此代替:

void level(int theC) { 
    switch (theC) { 
    case (0): 
     transparency = 255; 
     break; 
    case (1): 
     transparency = 230; 
     break; 
    case (2): 
     transparency = 200; 
     break; 
    case (3): 
     transparency = 170; 
     break; 
    case (4): 
     transparency = 140; 
     break; 
    case (5): 
     transparency = 110; 
     break; 
    case (6): 
     transparency = 80; 
     break; 
    case (7): 
     transparency = 50; 
     break; 
    case (8): 
     transparency = 20; 
     break; 
    case (9): 
     transparency = 0; 
     break; 

    } 
} 

我希望它有幫助。