La réponse de George est correcte. Je l'ai upvoted et je crois que vous devriez le marquer comme la bonne réponse. La réponse de Yushi est fondamentalement juste la réponse de George, déplacée dans une classe.
Ils utilisent tous les deux détection de collision rectangle de point, qui vérifie si le point est à l'intérieur du rectangle. Vous vérifiez simplement chaque rectangle par rapport au point (dans votre cas, la position de la souris), et cela vous permet de déterminer dans quel rectangle la souris se trouve. Cela fonctionnera même si vous avez un tas de rectangles de formes différentes, et même rectangles qui se chevauchent.
L'autre façon de le faire est d'utiliser détection de collision basée sur la grille qui tire parti du fait que vous avez un tas de rectangles espacés uniformément qui ne se chevauchent pas. Vous utiliseriez simplement la division pour déterminer dans quelle cellule se trouvait la souris, puis vous convertiriez cette cellule en coordonnées et vous utiliseriez ces coordonnées pour dessiner le rectangle. Cela peut sembler déroutant, mais il ressemble à ceci:
int cols;
int rows;
int scl = 20;
void setup() {
size(400, 400);
cols = width/scl;
rows = height/scl;
}
void draw() {
background(100);
for (int x = 0; x < cols; x++) {
for (int y = 0; y < rows; y++) {
stroke(55);
fill(50, 50, 50);
rect(x*scl, y*scl, scl, scl);
}
}
int hoveredRectColX = int(mouseX/scl);
int hoveredRectRowY = int(mouseY/scl);
float rectX = hoveredRectColX * scl;
float rectY = hoveredRectRowY * scl;
fill(255, 0, 0);
rect(rectX, rectY, scl, scl);
}
Le dernier bloc de code est la viande et les pommes de terre.D'abord, il détermine la ligne et la colonne de la souris, puis détermine la position de cette cellule et l'utilise pour dessiner un rectangle. Si cela n'a pas de sens, la meilleure chose à faire est de sortir une feuille de papier et un crayon et de dessiner un tas d'exemples pour voir ce qui se passe. Auto-promotion éhontée: J'ai écrit un tutoriel sur la détection de collisions dans le traitement, y compris la détection de collisions ponctuelle et rectangulaire, disponible here.
Merci d'avoir pris le temps de résoudre ce problème pour moi, je l'apprécie vraiment. Fonctionne exactement comme je le voulais! – Icy4614