如何在游戏画面上进行渐变

时间:2019-05-09 01:37:14

标签: java processing

这是我的简单游戏,我需要使背景渐变。蓝色需要在底部变浅,在顶部变深。我需要绿草还留在图片中。我只能说它的顶部是黑色的。有人可以帮我弄这个吗。我正在使用处理

int r = 0;
int g = 0;
int b = 0;

void setup() {
    size(640, 480);
    changeinbackground();
}

void draw() {
    changeinbackground();

    drawsun();
    noStroke();
    strokeWeight(2);
    fill(0);
}

void drawsun() {
    fill(255, 255, 0);
    ellipse(20, 30, 120, 120);
}

void changeinbackground() {
    {
        fill(0, 255, 0); // colour selected for the grass on the bottom
        stroke(20, 255, 0); //green outline
        rect(0, 430, 650, 55); // grass on the bottom
    }
    for(int i = 0; i<400; i +=10 ){
        fill(r,g,i);
        noStroke();
        rect(0,i,640,40);
    }
}

1 个答案:

答案 0 :(得分:0)

颜色通道的值必须在[0,255]范围内,请参见color()
黑色为(0, 0, 0),白色为(255, 255, 255)

要创建渐变,您必须定义起始颜色和终止颜色,并在这两种颜色之间进行插值。
例如,深蓝色为(0, 0, 127),浅蓝色为(195, 195, 255)
2颜色可以用lerpColor()进行插值。 lerpColor的第三个参数是[0.0,1.0]范围内的浮点值。如果为0.0,则函数返回的是第一个color参数。如果为1.0,则结果为第二种颜色参数。

例如

color c1 = color(0, 0, 127);
color c2 = color(195, 195, 255);

void changeinbackground() {

    // [...]

    for(int i = 0; i<400; i +=10 ){

        float amt = i / 399.0;
        fill(lerpColor(c1, c2, amt));

        noStroke();
        rect(0, i, 640, 40);
    }
}