Bonjour à tous.
Je code actuellement un jeu en 2D isométrique. Le monde affiché est un ensemble de blocs où une interaction à la souris est possible pour chacun d'eux. L'ensemble de cubes est un vector de vector d'objets de type "Entite" (Entite est la classe qui représente un cube).
Visuellement un bloc est un sprite représenté par une image de 40*34, où trois faces du cube sont représentés (image du sprite ici :
http://dl.dropbox.com/u/98268173/0.png). quand plusieurs cubes sont côtes-à-côtes, le cube le plus "devant" se place sur le cube juste "derrière" et cache donc les faces de cotés pour que les faces de haut des deux cubes soient alignés et collés.
Maintenant passons à mon problème (qui ne vient pas de l'affichage des cubes). Actuellement pour savoir si la souris est sur l'un des cubes, je scanne le vecteur de vecteur avec un double for, et exécute la méthode gererInteraction() de la classe Entite à chaque tour, qui me renvoie un booléen qui m'indique si la souris se situe exactement sur le cube. Si c'est le cas j'arrête la boucle for (inutile d'aller plus loin).
Cependant vu que le jeu tourne à 60 fps, le test du vector utilise pas mal de ressources au niveau du processeur (car c'est enfaite un vector à 3 dimensions, mais pour pas compliquer les choses restons sur du 2 dimensions). J'aimerais donc gérer les interactions d'une manière beaucoup moins lourde est brutale (parce que là je ne suis qu'au début du codage du jeu).
Mon idée serait de récupérer les coordonnées (relative à mon tableau de vector, pas les coordonnées des sprites en fonction de la fenêtre) de tous les cubes où la souris se situe dans son rectangle de sprite, puis de les tester un par un (le test serait donc extrêmement moins lourd) et sans passer par une double boucle.
Cependant là je bloque pour ma méthode. Je ne vois pas comment récupérer un minimum de cubes sans tous les scanner et les comparer au curseur de la souris.
J'aimerais donc avoir votre avis et votre aide, et si vous voyez une méthode assez intéressante n'hésitez pas à m'en parler.
Merci d'avance.
PS : j'ai pas fourni de code car je suis parti sur un cas assez général, mais si vous voulez que je le poste pour voir plus en détail comment je gère les tests dites le.