J'essaie d'écrire un petit programme qui a un nombre donné de balles (dans l'exemple de code ci-dessous c'est 3) aller et venir sur l'écran à différentes vitesses et phases (décalage de départ). Ce résultat a été atteint dans le code. Bien que je veux être en mesure de sélectionner les balles (un à la fois) en utilisant un clic de souris. J'ai utilisé le mot "HIT !!!" pour signifier dans la console qu'une balle a été cliquée.traitement: problème d'utilisation du tableau global dans si la condition dans la boucle pour
Mon problème est que lorsque je cours le code ci-dessous, je reçois seulement un "HIT!" dans la console quand je clique sur la balle du haut. C'est alors que le premier élément y [0] correspond à la variable click_Y. Quand je suis sûr (mais évidemment erroné en quelque sorte) qu'il devrait y avoir des allumettes quand je clique dans le voisinage de y [1] & y [2].
Je serais vraiment reconnaissant pour toute aide avec ceux-ci. Comme c'est arrivé au point où je commence à regarder fixement à l'écran. Merci.
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);
}
Merci pour la réponse. Oui, j'avais une certaine inclinaison en réinitialisant Click_X et Click_Y avait quelque chose à voir avec ça. J'avais commenté ces lignes. Bien que sans réinitialiser ces variables comme obtenait plusieurs "HIT" pour chaque fois qu'une balle traversait le point que j'avais cliqué, alors que je voulais seulement un coup par clic. Comme vous le dites si je dois trouver une autre façon de faire face à cela. Merci pour certains conseils très judicieux !! – HiSulu
J'ai déplacé les lignes 'click_X = 0;' et 'click_Y = 0;' descendre quelques lignes dans le code afin qu'elles soient en dehors de la boucle for, mais elles sont toujours réinitialisées de sorte qu'elles ne "traînent" pas, causant des coups même si une balle n'a pas été touchée directement. Je sais que ce n'est probablement pas la meilleure pratique. Mais cela m'a donné un peu de répit et de respiration pour le moment. Je vais refactoriser. Merci encore Kevin! – HiSulu
@HiSulu Je vous ai recommandé de vous débarrasser entièrement de ces variables. Il suffit de les supprimer. La déclaration 'if' que j'ai posté vous montre exactement ce qu'il faut faire à la place. –