java - 在处理中通过鼠标单击更改对象颜色
问题描述
我正在处理一个学校项目(Java 模式)。任务是在单击 Ball 对象时更改其颜色。
不幸的是,我只改变一个对象。如果我点击屏幕,所有对象都会改变颜色。
这是我的课程:
Ball[] barray= new Ball[20];
void setup(){
size(400,400);
for (int i=0; i<20; i++){
barray[i] = new Ball();
}
strokeWeight(40);
}
void draw(){
background(255,255,255);
for (int i=0; i<barray.length; i++){
barray[i].paint();
}
for (int i=0; i<barray.length; i++){
barray[i].move();
}
if (mousePressed) {
for (int i = 0; i < barray.length; i++) {
barray[i].testHint();
}
}
}
球类:
public class Ball {
int x, diffx;
int y, diffy;
public Ball() {
x= (int) random(1, width);
diffx= (int) random(1, 5);
y= (int) random(1, height);
diffy= (int) random(1, 5);
}
public void move(){
x += diffx;
if (x<0 || x> width){
diffx *= -1;
}
y += diffy;
if (y<0 || y> height){
diffy *= -1;
}
}
public void paint(){
point(x,y);
}
public void testHint() {
float d = dist(mouseX,mouseY,this.x,this.y);
if ( d < 5){
stroke(255,0,0);
point(this.x,this.y);
}
}
}
谢谢您的帮助。
解决方案
所以这里是工作示例(http://hello.processing.org/display/#@-MDZNtlpRsdS_3GSlvvg):
public class Ball {
int x, diffx;
int y, diffy;
bool active;
public Ball() {
active = false;
x= (int) random(1, width);
diffx= (int) random(1, 5);
y= (int) random(1, height);
diffy= (int) random(1, 5);
}
public void move(){
x += diffx;
if (x<0 || x> width){
diffx *= -1;
}
y += diffy;
if (y<0 || y> height){
diffy *= -1;
}
}
public void paint(){
if(active) {
stroke(255,0,0);
}
point(x,y);
stroke(0,0,0);
}
public void testHint() {
float d = dist(mouseX,mouseY,this.x,this.y);
if ( d < 5 ) {
active = true;
}
}
}
Ball[] barray= new Ball[20];
void setup(){
size(400,400);
for (int i=0; i<20; i++){
barray[i] = new Ball();
}
strokeWeight(40);
}
void draw(){
background(255,255,255);
for (int i=0; i<barray.length; i++){
barray[i].paint();
}
for (int i=0; i<barray.length; i++){
barray[i].move();
}
if (mousePressed) {
for (int i = 0; i < barray.length; i++) {
barray[i].testHint();
}
}
}
在那之后,您在描边函数中提供的颜色将对所有油漆都有效,这就是为什么您必须在调用 point() 后将其重置为黑色的原因。因此,您的所有球都有活动标志,可以在绘制之前更改颜色。