IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Physique Discussion :

Gestion simple des collisions et de la gravité


Sujet :

Physique

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut Gestion simple des collisions et de la gravité
    Bonjour,


    Je m'entraîne un peu au développement de jeux en Delphi. Pour l'instant, j'ai pris quelque chose : des balles dans un rectangle qui rebondissent et s'entrechoquent entre elles

    Comment bien géré les collisions ? pour l'instant je fais un truc du genre SI positoin bord haut gauche de la balle < position du bord haut-gauche de la fenêtre ALORS on inverse la vitesse (vitesse = -vitesse) etc...

    Y a-t-il une méthode plus souple par exemple si on position un objet dans la fenêtre genre un mur qui aura une position la balle rebondiraient dessus comme sur les bords ?

    Sinon je veux créer une classe TBalle pour que se soit beacoup plus souple mais je sé pas trop comment l'implémenter. Comment géré les collisions entre balles ?

    JE sais sa fait beacoup de question mais ce serait pour me guider un peu déjà rien qu'au niveau de la gestion de la collision avec les bords de la fenetre avec une seule balle ce serait déjà pas mal

    voila déjà ce que j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, pngimage, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Image1: TImage;
        Timer1: TTimer;
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        procedure Refresh;
      end;
     
    var
      Form1: TForm1;
     
      BallPos,           // Position
      BallSpeed : TPoint;   // Vitesse
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Refresh;
    begin
      Image1.Left:=BallPos.X;   // On position la balle à l'éran suivant ses coordonnées
      Image1.Top:=BallPos.Y;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      DoubleBuffered:=True;
      Randomize;
     
      BallPos.X:=Trunc(Random(ClientWidth-Image1.Width));   // Position aléatoire sur l'écran
      BallPos.Y:=Trunc(Random(ClientHeight-Image1.Height));
      Refresh; // On dessine la balle
     
      BallSpeed.X:=Trunc(Random(20))-10; // Vitesse aléatoire entre -10 et 10
      BallSpeed.Y:=Trunc(Random(20))-10;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if ((BallPos.X+BallSpeed.X<=0) or ((BallPos.X+BallSpeed.X+Image1.Width)>=ClientWidth)) then BallSpeed.X:=-BallSpeed.X
      else BallPos.X:=BallPos.X+BallSpeed.X;    // Si la balle touche le bord gauche ou le bord droit, on inverse la vitesse horizontale
     
      if ((BallPos.Y+BallSpeed.Y<=0) or ((BallPos.Y+BallSpeed.Y+Image1.Height)>=ClientHeight)) then BallSpeed.Y:=-BallSpeed.Y
      else BallPos.Y:=BallPos.Y+BallSpeed.Y;   // Si la balle touche le bord haut ou le bord bas, on inverse la vitesse verticale
     
      Refresh;  // On dessine la balle
    end;
     
     
    end.
    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Hello Fab56,
    regarde cette discussion

    http://www.developpez.net/forums/d63...eme-pinball-3d

    Sinon si tu calcules la normale au plan de collision c'est peut-être une solution

    http://fr.wikipedia.org/wiki/Normale_a_une_surface

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Comment géré les collisions entre balles ?
    http://liocity.free.fr/charger_delph...tutoriel35.htm

    Tu trouvera ton bonheur là
    Regarde aussi les differents tutos sur la page d'accueil
    Cliquez ici et reprenez le pouvoir !
    A bas IE !, Google, et le pistage du net, testons DuckDuckGo.com
    Lords Of The Realm II Download : Lords of the realm 2
    Infos en anglais :Ici

Discussions similaires

  1. Réponses: 11
    Dernier message: 27/02/2015, 10h36
  2. Réponses: 2
    Dernier message: 13/12/2010, 16h01
  3. Gestion globale des collisions
    Par dancingmad dans le forum Physique
    Réponses: 3
    Dernier message: 15/10/2010, 19h14
  4. [infos utile+code] -> gestion exacte des collisions
    Par Lorenzo77 dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 13/01/2009, 20h18
  5. [MediaWiki] Cherche Wiki avec gestion simple des utilisateurs
    Par aktos dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 25/11/2007, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo