java - 允许线集颜色最初相同

标签 java colors processing

我有这个程序,它可以完成我想要它做的几乎所有事情,除了一个问题,而且它确实是一个很小的问题。当线条集和颜色框最初出现时,它们在初始化时都是白色的。但是,当您通过单击某个框来更改每个颜色时,它们都会更改为不同的颜色。为了让它们全部变成相同的颜色,你必须循环一次它们。我希望所有颜色框从一开始就具有相同的颜色,而不必循环,但我不确定为什么我的设置方式不允许这样做。如果有任何纠正建议,我将不胜感激。

final int arraySize = 4;
int counter;

Button[] b = new Button[arraySize];
int[] flag = new int[]{1, 1, 1, 1};
boolean[] show = new boolean[arraySize];
char[] keys = new char[]{'1', '2', '3', '4'};
color[] cols = new color[] {#F6546A, #FFC390, #FFF68F, #D3FFCE, #C6E2FF, #D2B4FF, #FFFFFF, };
color[] c = new color[]{#FFFFFF, #FFFFFF, #FFFFFF, #FFFFFF};

void setup() {
  size(800, 700);
  counter = 0;

  for (int i = 0; i < arraySize; i++) {
    b[i] = new Button(20, 160+(40*i), 20, 20);
  }
}

void draw(){
  background(0);
  for (int i = 0; i < arraySize; i++) {
    if (show[i]) {
      b[i].draw_button(c[i]);
    }
  }
}

void keyPressed() {
  for (int i = 0; i < arraySize; i++) {
    if (key == keys[i] && flag[i] == 1) {
      show[i] = true;
      flag[i] = flag[i]*-1;
    } else if (key == keys[i] && flag[i] == -1) {
      show[i] = false;
      flag[i] = flag[i]*-1;
    }
  }
}

void mouseClicked() {
  for (int i = 0; i < arraySize; i++) {
    if (b[i].mouse_is_over() == true ) {
      c[i] = cols[counter];
      counter++;
    }
    if (counter == cols.length) {
      counter = 0;
    }
  }
}

class Button{
  float x, y, w, h;

  Button(float xpos, float ypos, float width_, float height_){
    x = xpos; y = ypos;
    w = width_; h = height_;
  }

  void draw_button(color c){
    fill(c);
    stroke(255);
    rect(x, y, w, h);
  }

  boolean mouse_is_over(){
    return (mouseX > x && mouseX < (x+w) && mouseY > y && mouseY < (y+h));
  }
}

最佳答案

现在,您的 counter 变量位于 Button 实例之外。因此,如果您单击第一个按钮,您的 counter 变量将变为 1,您可以使用它来设置第一个按钮的颜色。然后,当您单击第二个按钮时,您的 counter 变量将上升到 2,您可以使用它来设置第二个按钮的颜色。单击其他按钮时会发生同样的情况:单击一个按钮会影响所有其他按钮的下一种颜色。

如果您希望每个按钮都有自己的颜色序列,那么您会希望每个 Button 实例都有自己的计数器。换句话说,您需要将 counter 变量移动到 Button 类中。

然后,每当您使用 counter 变量时,您都必须使用特定 Button 实例的 counter 变量。

当您这样做时,您可能想要移动 Button 类中的一些其他变量。 c 数组可以是 Button 类中的单个变量,用于跟踪 Button 实例的当前颜色,或者您也可以删除它,因为无论如何您都可以使用 counter 变量。同样,flag 数组可以只是 Button 类中的一个 boolean 变量。

关于java - 允许线集颜色最初相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43509258/

相关文章:

javascript - 在javascript中选择最鲜艳的颜色

node.js - 如何更改 node.js 的控制台字体颜色?

java - 在处理中保存串行数据

java - xe :beanNamePicker, 无法将我的值从注释 View 获取到结果集中

java - 带有 'case when exists' 的 JPA @Query 不适用于 Hibernate

java - 如何从 Struts 2 中的选定对象获取对象属性

JavaFX 通过数据库值更改行颜色

java - 非阻塞 Java 异步处理 - 如何限制内存使用?

java - 让 PeasyCam 在处理中跟随一个球体绕另一个球体运行

javascript - 将处理转换为 p5.js