我有这个程序,除了一个问题外,我要做的大多数所有事情都可以做,而且它确实很小。当线路设置和颜色的盒子最初出现时,它们都是白色的。但是,当您通过单击一个盒子来更改每个盒子时,它们都会更改为单独的颜色。要使它们全部更改为相同的颜色,您必须循环一次。我希望所有的颜色框从一开始就可以是相同的颜色,而无需循环,但是我不确定为什么我设置的方式不允许这样做。我感谢任何更正的建议。
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
。换句话说,您希望将counter
变量移至Button
类内。
然后,每当您使用counter
变量时,都必须使用特定Button
实例的counter
变量。
当您使用时,您可能需要在Button
类中移动其他一些变量。c
数组可以是Button
类内部的一个变量,该类别可以跟踪Button
实例的当前颜色,也可以摆脱它,因为无论如何都可以使用counter
变量。同样,flag
数组可能只是Button
类内的boolean
变量。
@kevin workman
我意识到我实际上并不需要通过柜台,只需在班上内部化它。
final int arraySize = 4;
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'};
void setup() {
size(800, 700);
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();
}
}
}
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++) {
b[i].mouse_is_over();
}
}
class Button{
color[] cols = new color[] {#FFFFFF, #F6546A, #FFC390, #FFF68F, #D3FFCE, #C6E2FF, #D2B4FF,};
float x, y, w, h;
int counter;
Button(float xpos, float ypos, float width_, float height_){
x = xpos; y = ypos;
w = width_; h = height_;
counter = 0;
}
void draw_button(){
fill(cols[counter]);
stroke(255);
rect(x, y, w, h);
}
void mouse_is_over(){
if(mouseX > x && mouseX < (x+w) && mouseY > y && mouseY < (y+h)){
counter++;
counter = counter%cols.length;
}
}
}