Problème de rebond dans un casse-brique

Signaler
Messages postés
4
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
11 mai 2008
-
Messages postés
4
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
11 mai 2008
-
Bonjour, je suis étudiant en informatique et dans le cadre d'un cours sur la gestion de projet j'ai à réalisé un jeu de casse-brique.

J'arrive a déplacer la balle, la faire rebondir sur les mur et savoir quand une brique est touchée et doit donc être retirée, mon problème je situe juste après ceci, il me faut faire rebondir la balle et je n'y arrive que partiellement, c'est un rebond tout simple que j'effectue. une image sera plus simple pour expliquer précisément mon problème.

Afin d'éviter de casser plusieurs briques je vérifie la futur position de ma balle et donc j'excute le rebond avant qu'elel entre dans la zone de la brique en réalité. Seulement en fonction de la "zone" dans laquelle est ma balle avant de toucher la brique, je na'rrive pas a déterminer le rebond. Les 4 "zone" notée "bug" sur mon dessin sont problèmatique, les autres sont simple à rraiter je n'a qu'à inverser mon Vx ou mon Vy en fonction du coté touché. Cependant pour les coins ce n'est pas aussi simple ...

J'ai tenté 4 ou 5 façon différente d'aborder le sujet, j'ai demandé à un ami au final et sa solution assez complèxe avec une formule mathématique assez impressionnante ne fonctionne pas ... J'aurais donc souhaité savoir comment l'on procèdre d'habitude pour déterminer un rebond ou bien même la façon habtiuelle de vérifier la collision entre 2 objet, je suis assez perdu j'avoue que je commenc a déespérer et la limite pour rendre le travail arrive à son therme. Sur le papier mon code aurait du fonctionné, lrosque la balle arrive dans une zone pouvant touché le coin j'avais pensé en tout premier lieu à vérifier si mon Vy était plus grand que mon Vx, cela permet logiquement de savoir si la ball partira plus vers le bas / haut de la brique ou vers la gauche / droite non ? Visiblement je me suis trompé queqlue part car ca ne marche pas...

Donc au final après mon beau paté de texte ce que je voudrais savoir c'est quelle façon utilise-t-on habituellement pour faire rebondir un objet en movuement sur un autre ? ( Si c'est nécessaire je peux fournir mon code mais je pense que je suis mal parti à un moment ou un autre donc je préfère poser une question "générale"...)

Merci d'avance pour l'attention que vous preterai à mon problème ^^

PS : Désolé si je suis pas dans la bonen section je savais pas trop ou poster ce problème ...

6 réponses

Messages postés
4
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
11 mai 2008

Hum visiblement l'image a pas été prise par le système je met le liens normal ici :

http://img244.imageshack.us/my.php?image=problemerebondcassebriqab4.png

Désolé pour le double post ...

Salut,

Tu peux utiliser la réflection pour traiter le sujet. Sinon il faut utiliser la théorie des collisions et c'est quelque chose d'assez complexe
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
unité Windows :

PtInRect

PtInRegion
RectInRegion

voir aussi dans l'aide du SDK windows : region, rect, point etc

<hr size="2" width="100%" />
Messages postés
4
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
11 mai 2008

Merci f0xi, c'est tout  à fait ce qu'il me faut mais j'ai malheureusement du mal à comprendre l'utilisation de ces fonctions et ce malgré l'exemple plutôt bien commenté que j'ai trouvé, tu me dis de voir dans l'aide du SDK windows, saurais-tu m'indiquer comment la consulter s'il te plait ?
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
le SDK windows est disponible avec Delphi (installation custom -> aide -> SDK windows)

sinon il reste la MSDN consultable en ligne même si les codes de fonctions sont en C++ c'est pas grave les convertions Delphi sont 1:1 la plus part du temps.

PtInRect : renvois true si TPoint est dans TRect, sinon false
PtInRegion : renvois true si TPoint est dans HRGN (handle de region), sinon false
RectInRegion : renvois true si TRect est dans HRGN (handle de region), sinon false

par contre, y'a pas RegionInRegion, j'ai pas trouver ... dommage.

mais bon la region permet de faire une region hexagonale sur la balle (plus precis qu'un rectangle) et le Rect permet de stocker une Brique.

donc Brique dans TRect, Balle dans region donc :

if RectInRegion(Brique.Rect, Balle.Region) then
begin
   Brique.Kaputt;
   Balle.Pong;
end;

je te conseil de faire des objets avec les briques et balles pour mieux les controller et inclure les methodes et propriété propres a elle (ré-utilisabilitée du code!)

sinon tu peu toujours te developper un moteur physique minimaliste, mais bon, y'en as deja des existant, ODE par exemple mais il doit etre surtout pour la 3D.

pour l'angle de renvois de la balle par la barre, je pense qu'il faut voir un truc comme ça :

  

<hr size="2" width="100%" />
Messages postés
4
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
11 mai 2008

Merci pour votre précieuse aide je m'en suis à peu prêt sortis, merci :)