首页 > 解决方案 > 如何根据 Processing3 中的鼠标位置更改 RGB 颜色?

问题描述

我正在 Processing3 中编写一个小程序,使我能够将背景更改为存储在数组中的特定颜色 RGB 代码。R、G 和 B 的每个值都存储在一个单独的数组中。

改变鼠标的水平位置会改变背景的颜色。

然而,这个解决方案代码非常重复,并且有很多 if/else 语句。我想使用 for() 循环来简化代码并减少重复性。但是,我正在努力将鼠标位置变量包含在 for() 循环中。是否有使用 for() 循环简化此代码并以某种方式映射鼠标位置以访问数组项?这是我现在拥有的代码:

int[] r = {255,249,240,233,227};
int[] g = {115,138,157,173,187}; 
int[] b = {0,18,63,94,120};

void setup() {
   size(500, 500);
}

void draw() {
    int x = mouseX;

    if(x >= 0 && x <=100) {
        background(r[0], g[0], b[0]);
    }

    else if (x >= 101 && x <= 200){ 
        background(r[1], g[1], b[1]);
    }

    else if (x >= 201 && x <= 300){ 
        background(r[2], g[2], b[2]);
    } 
    else if (x >= 301 && x <= 400){ 
        background(r[3], g[3], b[3]);
    }  
    else {
        background(r[4], g[4], b[4]);
    }
}

我希望将代码简化为更像这样的代码:

 int[] r = {255,249,240,233,227};
 int[] g = {115,138,157,173,187}; 
 int[] b = {0,18,63,94,120};

 void setup() {
    size(500, 500);
  }

 void draw() {

    for(int i=0; i<r.length; i++) {
        background(r[i],g[i],b[i]);
    } 
 }

但是,我不知道如何以某种方式更改此代码,即背景颜色会根据鼠标水平位置而改变,如第一个示例所示。

感谢您的回复和帮助!

标签: javaprocessing

解决方案


如果您的不同值之间的步长为 100,那么您只需将输入 X 值除以 100。整数除法将处理其余部分。

if 语句只是为了确保它保持在数组的范围内。

int mouseX = ...;
int i = mouseX / 100;

if(i < r.length && i < g.length && i < b.length)
{
  background(r[i], g[i], b[i]);
}

推荐阅读