我正在尝试编写一个具有给定数量的球的小程序(在它下面的示例代码中,3)以不同的速度和阶段(开始偏移)在屏幕上来回移动。 在代码中已经实现了这么多。虽然我希望能够使用鼠标点击选择球(一次一个)。 我用了#34; HIT !!!"在控制台中表示已点击一个球。
我的问题是,当我运行下面的代码时,我只得到一个" HIT!"在我点击顶部球时在控制台中。这是第一个元素y [0]与click_Y变量匹配的时间。当我确定(但显然有点误会)当我点击y [1]&附近时应该有匹配Y [2]。
我真的很感激任何帮助。因为它已经到了我开始茫然地盯着屏幕的地步。感谢。
int noCircles; // the number of items in the array (# of circles)
float[] y; // y-position of each circle (fixed)
float[] speed; // speed of each circle
float[] phase; // phase of each circle
float red = 120;
float green = 120;
float blue = 120;
float click_X;
float click_Y;
void setup() {
size(500, 500);
noCircles = 3;
// allocate space for each array
y = new float[noCircles];
speed = new float[noCircles];
phase = new float[noCircles];
// calculate the vertical gap between each circle based on the total number
// of circles
float gap = height / (noCircles + 1);
//setup an initial value for each item in the array
for (int i=0; i<noCircles; i++) {
y[i] = gap * (i + 1);
// y is constant for each so can be calculated once
speed[i] = random(10);
phase[i] = random(TWO_PI);
}
}
void draw() {
background(155);
for (int i=0; i<noCircles; i++) {
// calculate the x-position of each ball based on the speed, phase and
//current frame
float x = width/2 + sin(radians(frameCount*speed[i] ) + phase[i])* 200;
if (dist(x, y[i], click_X, click_Y) <= 20){
println("HIT!!!!!!!!!!!!!!!!!!");
}
ellipse(x, y[i], 20, 20);
click_X = 0;
click_Y = 0;
}
}
void mousePressed() {
println("You clicked******************************************");
click_X = mouseX;
click_Y = mouseY;
println("click_X =" + click_X);
println("click_Y =" + click_Y);
}
答案 0 :(得分:1)
这些问题最好通过debugging程序来解决。首先手动跟踪代码,然后添加打印语句(超过您已经添加的内容),如果这样做不起作用,那么不要害怕使用调试器。
您正在使用click_X
和click_Y
变量来检查鼠标相对于每个球位置的位置。跟踪for
函数中的draw()
循环。在第一次迭代结束时会发生什么?
您重置了click_X
和click_Y
的值。这就是为什么你没有检测到其他圈子的任何点击的原因。
您可能可能会重构您的代码,只有在遇到某些内容时才重置这些变量,但实际上,我会完全停止使用它们。
我猜你正在使用这些变量,因为你只想检查鼠标何时被按下?只需使用mousePressed
变量即可。然后,您可以直接使用mouseX
和mouseY
变量。
然后您的if
语句将如下所示:
if (mousePressed && dist(x, y[i], mouseX, mouseY) <= 20) {
println("HIT: " + i);
}
此外,使用像这样的单独数组称为并行数组,并且通常是一个坏习惯。您应该使用classes代替。