Aide pour moteur physique d'un casse-brique

Démarré par Vaati31, 27 Février 2013 à 14:18

0 Membres et 1 Invité sur ce sujet

Bonjour à tous,
Je suis en train de faire un casse-brique version Zelda codé en javascript (vous pouvez tester la version actuelle ici), mais j'ai un problème au niveau de la physique de la balle.
En fait, pour la faire rebondir, à chaque collision je la fais aller dans une direction aléatoire, ce qui fait que les rebonds ne sont pas très naturels (par exemple, des fois la balle va vers en haut à droite et quand elle se cogne au mur du haut elle repart en sens inverse, vers en bas à gauche :/ ).
Est-ce que vous savez comment est-ce que je pourrais faire pour rendre les collisions plus naturelles?

27 Février 2013 à 15:44 #1 Dernière édition: 27 Février 2013 à 15:46 par Christopho
Le plus simple est de choisir l'angle de la façon suivante (je parle en degrés) :
- si la balle rebondit contre un mur vertical : angle = 360 - angle
- si la balle rebondit contre un mur horizontal : angle = 180 - angle
(Je n'ai pas testé)

La valeur 0 étant vers la droite, 90 = haut, 180 = gauche, 270 = bas (c'est l'inverse du sens des aiguilles d'une montre).

Pour les rebonds sur la barre du joueur, il faudra donner plus d'angles possibles sinon on restera toujours dans les 4 mêmes angles. Donc soit avec une dose d'aléatoire soit en prenant en compte la position horizontal de la balle par rapport à la barre.
Chaîne Twitch : diffusion en direct de sessions de développement de Solarus, de création de jeux, de parties de jeux vidéo.
Chaîne YouTube : replays des diffusions en direct, tutos Solarus
Compte Twitter : pour être au courant des nouveautés
Chat Discord : pour discuter en direct avec la communauté Solarus

Ah oui, effectivement ça marche^^.
Je n'avais pas pensé à différencié les murs horizontaux des murs verticaux.
Par contre je crois que tu as inversé horizontaux et verticaux ^^.

Merci :).

Bah, le principe est là au moins :)
Après, pour ajouter des angles, soit tu te tapes les analyses du point de rebond, mais ça devient très vite plus compliqué, soit tu te contentes de faire changer l'angle en fonction de l'endroit où ta balle touche ta raquette, ce qui est beaucoup plus simple^^

J'avais un vieux casse-briques sous Game Maker avec Zora Rouge, en gros, à la collision de la balle et de la raquette, le code était approximativement le suivant (équivalent en C) :

int w = raquette.width;
balle.direction = 140 * (1 - ((balle.x - (raquette.x - 1 / 2 * w)) / w)) + 20;


Pour bien comprendre, l'origine de la balle et de la raquette sont au milieu des objets. Ensuite, je calculais un angle, toujours vers le haut (140° d'angles possibles), donc entre 20° et 160° (d'où le +20 à la fin car l'angle de base est entre 0° et 140°). Le reste de la formule donne est un pourcentage pour savoir à quel pourcent de cette fourchette d'angle ira la balle^^

A vrai dire, je n'aime pas les casse-brique où la balle va dans une direction en fonction de l'endroit où elle rebondit sur la raquette, donc, même si c'est plus simple, je ne ferais pas ça  ^_^.
Je pense que je ferais comme pour les murs horizontaux (360-angle) et que je rajouterais quelques degrés aléatoirement.

Ou alors tu tiens compte du mouvement de la raquette au moment de la collision ^^
Chaîne Twitch : diffusion en direct de sessions de développement de Solarus, de création de jeux, de parties de jeux vidéo.
Chaîne YouTube : replays des diffusions en direct, tutos Solarus
Compte Twitter : pour être au courant des nouveautés
Chat Discord : pour discuter en direct avec la communauté Solarus

Ah ouais bonne idée ^^.
Rah ça m'énerve à chaque fois que j'améliore le jeu, on me donne une autre bonne idée :lol:.