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

Langage Delphi Discussion :

gestion de collisions delphi2005


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Étudiant
    Inscrit en
    Août 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 108
    Par défaut gestion de collisions delphi2005
    bonjour,
    je voudrais gérer les collisions entre 2objets d1 même map avec la fonction IntersectRect. j'ai consulté plusieurs exemples sur le net sur ce sujet mais lorsque je lutilise, celle ci elle me renvoi des collisions a chaque déplacement(que gauche sur cet exemple!). ET je ne vois pas du tout pourquoi? voici le code

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    procedure TForm1.FormCreate(Sender: TObject);
     
    begin
     
    nbobjets:=1;
    vitesse:=10;
    ResolutionX:=500;
    ResolutionY:=650;
    ClientWidth := ResolutionX;
    Clientheight := ResolutionY;
                            //Taille fenêtre
    Fond := TBitmap.Create;
    Arbre := TBitmap.Create;
    Balle := TBitmap.Create;
    Balle2 := TBitmap.Create;
    Buffer := TBitmap.Create;
     
      Fond.LoadFromFile('./FOND.bmp');        //objets
      Balle.LoadFromFile('./BALLE.bmp');
      Balle2.LoadFromFile('./BALLE2.bmp');
      Arbre.LoadFromFile('./Arbre.bmp');
     
    Arbre.TransparentColor:=clFuchsia;
    Arbre.Transparent:=true;
    Balle.TransparentColor:=clFuchsia;           //Transparence
    Balle.Transparent:=true;
    Balle2.TransparentColor:=clFuchsia;
    Balle2.Transparent:=true;
     
     
    x:=-((fond.width-ResolutionX) div 2);
    y:=-((fond.Height-ResolutionY) div 2);                     //Possition Map
    TempPosX:=((resolutionX div 2) - balle.Width div 2)  ;
    TempPosY:=((resolutionY div 2) - balle.Height div 2)  ;
    PosX:=TempPosX ;                           // Position Objet dans fenêtre
    PosY:=TempPosY ;
     
    Pas:=true;
    Remplir_Buffer;
     
    end;
     
     
    procedure Tform1.Remplir_Buffer;
    begin
     with buffer do
      begin
       assign(fond);
       Canvas.Draw(0+x,0+y,Buffer);
       if Pas=true then
        Canvas.Draw(PosX,PosY,Balle)
       else
        Canvas.Draw(PosX,PosY,Balle2);                  //Position Objets
     
        canvas.Draw(250+x,200+y,Arbre);
       end;
       paint;
    end;
     
    procedure TForm1.FormPaint(Sender: TObject);
     
    begin
    Canvas.Draw(0,0,Buffer);
    end;
     
     
        //------------------------Mouvements------------------------//
        //----------------//
     
     
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    var
    Varf:trect;
     
    begin
     
    if key = vk_left then
      begin
     
       Pas:=not(Pas);
     
       if (x<-10) and (PosX<ResolutionX div 2) then
         begin
           VarF:= Collision(Bounds((-x+ResolutionX div 2), y, 50, 50), Bounds((-x+ResolutionX div 2) + vitesse, y, 50, 50), Balle); //appel de fonction collision
           x := x + vitesse;
           paint;
       end
       else
         if  (PosX - Vitesse >x) then
          begin
          PosX:= PosX - vitesse;
          paint;
          end;
       end;
       Remplir_Buffer;
    end;
     
     
          //------------------------Collision----------------------//
          //--------------//
     
     
    function TForm1.Collision(cur_coord, new_coord: TRect; User_Pos: TBitmap): TRect;
    var
    i:integer;
    collision_zone: TRect;
    begin
      for i := 1 to nbobjets do
        begin
           BM_Objet_Test := TBitmap.Create;
           BM_Objet_Test.LoadFromFile('./Arbre.bmp');
      if  not IntersectRect(collision_zone, bounds(new_coord.Left, new_coord.Top, User_Pos.width, User_Pos.height),
        bounds(y,x, BM_Objet_Test.width, BM_Objet_Test.height))then
     
      abort;
     
      end;
      BM_Objet_Test.free;
    end;
    end.
    merci de votre reponse

    [Modération, NoisetteProd : Pensez à utiliser la balise [CODE] qui améliore la lisibilité, merci]

  2. #2
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    je n'ai pas regardé ton code de façon approfondi mais j'ai déjà fait un code un peu similaire avec une balle renvoyée par deux raquettes mais moi j'ai pris un Tpoint centré sur ma balle en déplacement et je gérais les collisions avec la fonction PtInRect (boolean)---> si le centre de ma balle se trouve dans le rect obstacle+la moitié du carré de la balle-->
    utilise à cet effet 'inflaterect' alors collision ptInrect vrai...
    si ça peut t'aider... c'est peut-être plus simple que intersectrect.

  3. #3
    Membre éprouvé

    Étudiant
    Inscrit en
    Août 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 108
    Par défaut
    merci bcp de ta réponse je vais essayer ca !

Discussions similaires

  1. [FLASH MX2004] Gestion de collisions pour plateformes
    Par sourivore dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 10/05/2006, 13h08
  2. Gestion de collision simple.
    Par ThanosT dans le forum DirectX
    Réponses: 2
    Dernier message: 03/05/2006, 12h47
  3. Importer avec Ogre / Gestion des collisions
    Par alex6891 dans le forum Ogre
    Réponses: 9
    Dernier message: 19/02/2006, 17h43
  4. Gestion de collision et OpenGL
    Par kanux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 08/01/2005, 21h07
  5. Gestion des collisions - terrains
    Par Dranor dans le forum DirectX
    Réponses: 1
    Dernier message: 26/06/2003, 18h50

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