与えられた数のボール(その下のサンプルコードで)が異なるスピードで画面を前後に移動する小さなプログラムを作成しようとしています。フェーズ(開始オフセット)。 これは多くのコードで達成されています。私は、マウスのクリックを使ってボールを(一度に1つずつ)選択できるようにしたいですが。 私は "HIT !!!"という言葉を使用しました。ボールがクリックされたことをコンソールで示す。処理:forループでif条件でグローバル配列を使用するときに問題が発生する
私の問題は、以下のコードを実行すると「ヒット」しか得られないということです。私がトップボールをクリックするとコンソールに表示されます。これは、最初の要素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);
}
返信いただきありがとうございます。はい、私はClick_XとClick_Yをリセットする傾斜がありました。私はそれらの行をコメントアウトしました。これらの変数をリセットせずに、ボールがポイントを通過するたびに複数の「HIT」を取得するようにしていましたが、私はクリック当たり1ヒットしか望みませんでした。あなたが言っているように、私はこれに対処する別の方法を見つける必要があります。非常に健全な助言をありがとう! – HiSulu
私は 'click_X = 0;'行を移動しました。 'click_Y = 0;'コード内のいくつかの行を削除してforループの外にあるようにしますが、ボールが直接ヒットしなかったとしてもヒットしないようにリセットされます。これはおそらくベストプラクティスではないことは分かっています。しかし、それは私にいくつかの救済と今呼吸室を与えてくれました。私はリファクタリングします。再度ありがとうKevin! – HiSulu
@ HiSulu私はこれらの変数を完全に取り除くことをお勧めしました。削除するだけです。私が投稿した 'if'ステートメントは、あなたが何をすべきか正確に示しています。 –