在处理中通过鼠标单击更改对象颜色
Change object color by mouse click in Processing
我正在处理一个学校项目(Java 模式)。任务是在单击时更改 Ball 对象的颜色。
不幸的是,我只能更改一个对象。如果我点击屏幕,所有对象都会改变颜色。
这是我的 classes:
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();
}
}
}
球class:
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() 调用后将其重置回黑色。从而在绘制之前为所有球设置活动标志以更改颜色。
我正在处理一个学校项目(Java 模式)。任务是在单击时更改 Ball 对象的颜色。
不幸的是,我只能更改一个对象。如果我点击屏幕,所有对象都会改变颜色。
这是我的 classes:
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();
}
}
}
球class:
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() 调用后将其重置回黑色。从而在绘制之前为所有球设置活动标志以更改颜色。