Bonjour à tous !!
Le problème auquel je fais fasse va peut être vous sembler simple au premier abord. J'ai hésité tout d'abord à poster dans la partie jeux 2D, mais je me suis dit que ca pouvait etre plus proche de l'algorithmique.
J'espère que vous saurez trouver une solution à ce problème
Voici les données du problème :
On a une balle (carrée) constituée des coordonnées x et y de son point en haut à gauche, et de sa taille.
On a une brique, carrées, représentée par les coordonnées de son point en haut à gauche, et par sa taille.
La balle est en mouvement, la brique est immobile.
Un algorithme déjà existant permet de détecter lorsqu'il ya une collision entre la balle et la brique, c'est à dire lorsque la balle chevauche la brique.
Quand c'est le cas, il appelle une fonction determinerRebond, c'est la fonction que je cherche à écrire.
Petite explication :
Quand la balle tape la brique sur le coté gauche ou le coté droit, elle doit rebondir horizontalement. Quand elle tape la brique par en haut ou par en bas, elle doit rebondir verticalement. Si elle tape dans un coin, elle doit rebondir horizontalement ET verticalement (mais cette dernière option est facultative).
On dispose donc : de la balle avant qu'elle est fait son déplacement.
de la balle après qu'elle ai fait son déplacement, au moment ou elle est en collision (elle chevauche la brique).
et de la brique.
A partir de ces informations, determinerRebond doit indiquer si le rebond est vertical, horizontal, ou les deux.
On prend les conventions informatiques usuelles pour le repère : les X vont de gauche à droite et les Y de haut en bas (et repère orthonormé).
Je résume les paramètres :
Balle :
xBalle : Entier : coordonnée en X du coin en haut à gauche de la balle au moment de la collision
yBalle : Entier : idem en Y
oldXBalle : Entier : coordonnée en X du coin en haut à gauche de la balle avant le déplacement
oldYBalle : Entier : idem en Y
tailleBalle : Entier : taille en pixel d'un côté du carré représentant la balle
xBrique : Entier : coordonnée en X du coin en haut à gauche de la brique
yBrique : Entier : coordonnée en Y du coin en haut à gauche de la brique
tailleBrique : Entier : taille en pixel d'un côté de la brique
Et la fonction renvoie 1 pour rebond horizontal, 2 pour rebond vertical, et 3 pour rebond vertical et horizontal
Inutile de vous dire que j'ai beaucoup réfléchi à cet algorithme, et que j'ai expérimenté pas mal de choses.
La position à un instant t, que ce soit avant ou après la collision, n'est pas suffisante pour déterminer si la balle est arrivée verticalement ou horizontalement. J'ai trouvé une solution possible en utilisant des coefficients directeurs.
Mais j'ai du me gourer dans ma réflexion, parce que dans certains cas spéciaux, ca fait nimp...
Si quelqu'un veux bien m'aider par un petit algo miracle... Merci d'avance !!
@++
Piwaï
Partager