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

Lazarus Pascal Discussion :

Déplacer images (BGRABitmap)


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut Déplacer images (BGRABitmap)
    Bonjour,

    Je teste actuellement la librairie BGRABitmap.
    J'ai l'intention de faire un petit jeu avec Lazarus.
    J'ai besoin d'afficher et déplacer des images.

    J'ai donc fait un petit tests qui fonctionne, je voulais votre avis pour savoir, si mon code était correcte ou si je devais modifier des choses.

    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    unit Deplacer;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
      Arrow, BGRABitmapTypes, BGRABitmap;
     
    type
     
      { TDeplacer }
     
      TDeplacer = class(TForm)
        arrLeft: TArrow;
        arrRight: TArrow;
        arrDown: TArrow;
        arrUp: TArrow;
        Panel1: TPanel;
        procedure arrDownClick(Sender: TObject);
        procedure arrLeftClick(Sender: TObject);
        procedure arrRightClick(Sender: TObject);
        procedure arrUpClick(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
        procedure FormShow(Sender: TObject);
      private
        { private declarations }
        fond,
        cercle,
        anim: TBGRABitmap;
        pos: TPoint;
        nbCol,
        nbLig: Integer;
        procedure DeplacerCercle(c: Char);
        procedure DessinPanel;
        procedure RemplirFond;
      public
        { public declarations }
      end;
     
    implementation
     
    {$R *.lfm}
     
    uses
      strutils;
     
    { TDeplacer }
     
    procedure TDeplacer.FormShow(Sender: TObject);
    begin
      anim   := TBGRABitmap.Create(Panel1.Width, Panel1.Height, BGRAWhite);
      fond   := TBGRABitmap.Create(Panel1.Width, Panel1.Height, BGRAWhite);
      try
        cercle := TBGRABitmap.Create(Application.Location + 'imgs\cercleBlue.png');
      except
        cercle := TBGRABitmap.Create(50, 50, BGRA(255, 0, 0));
      end;
     
      pos.x  := 1;
      pos.y  := 1;
     
      RemplirFond;
      DessinPanel;
    end;
     
    procedure TDeplacer.FormDestroy(Sender: TObject);
    begin
      FreeAndNil(cercle);
      FreeAndNil(fond);
      FreeAndNil(anim);
    end;
     
    procedure TDeplacer.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      ShowMessage(IntToStr(Key));
    end;
     
    procedure TDeplacer.arrUpClick(Sender: TObject);
    begin
      DeplacerCercle('U');
    end;
     
    procedure TDeplacer.arrDownClick(Sender: TObject);
    begin
      DeplacerCercle('D');
    end;
     
    procedure TDeplacer.arrLeftClick(Sender: TObject);
    begin
      DeplacerCercle('L');
    end;
     
    procedure TDeplacer.arrRightClick(Sender: TObject);
    begin
      DeplacerCercle('R');
    end;
     
    procedure TDeplacer.DeplacerCercle(c: Char);
    begin
      // TODO: contrôle pour ne pas sortir de l'écran
      case c of
        'U':
          begin
            pos.y := pos.y - 1;
          end;
        'D':
          begin
            pos.y := pos.y + 1;
          end;
        'L':
          begin
            pos.x := pos.x - 1;
          end;
        'R':
          begin
            pos.x := pos.x + 1;
          end
        else ;
      end;
     
      if (AnsiContainsText('UDLR', c)) then
      begin
        DessinPanel;
      end;
    end;
     
    procedure TDeplacer.RemplirFond;
    var
      c, l: Integer;
      aCase: TBGRABitmap;
    begin
      nbCol := trunc((Panel1.Width  - 20) / 50);
      nbLig := trunc((Panel1.Height - 20) / 50);
     
     
      try
        aCase := TBGRABitmap.Create(Application.Location + 'imgs\cercle50.png');
     
        for c := 1 to nbCol do
          for l := 1 to nbLig do
          begin
            fond.PutImage(10 + (c - 1) * 50,
                          10 + (l - 1) * 50,
                          aCase, dmDrawWithTransparency);
          end;
      finally
        FreeAndNil(aCase);
      end;
    end;
     
    procedure TDeplacer.DessinPanel;
    begin
      anim.PutImage(0, 0, fond, dmSet);
      anim.PutImage(10 + (pos.x - 1) * 50,
                    10 + (pos.y - 1) * 50,
                    cercle, dmDrawWithTransparency);
      anim.Draw(Panel1.Canvas, 0, 0);
    end;
     
    end.
    Ce code affiche des cases en fond et déplace un cercle par dessus (en transparence).

  2. #2
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut, peut-être comme çà mais après à toi de voir

    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
    procedure TDeplacer.DeplacerCercle(c: Char);
    Const ValidChars= ['Z', 'S', 'Q', 'D',]
    Var
     upc : char;
    begin
      // TODO: contrôle pour ne pas sortir de l'écran
      upc:= UpCase(c);
      if upc in ValidChars then
      begin 
        case upc of
          'Z':
            begin
              pos.y := pos.y - 1;
            end;
          'S':
            begin
              pos.y := pos.y + 1;
            end;
          'Q':
            begin
              pos.x := pos.x - 1;
            end;
          'D':
            begin
              pos.x := pos.x + 1;
            end
        end;
        DessinPanel;
      end;
    end;
     
    procedure TDeplacer.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
      DeplacerCercle(Char(Key));
    end;
    C'est quoi le concept ? jeux de plateau, genre dames ?
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci de ta réponse.

    Oui je compte faire un petit jeu de plateau.
    Là j'en suis au phase de tests pour me familiariser avec la bibliothèque.

    Ma question concernait principalement l'utilisation de TBGRABitmap.
    Comment gérer la transparence des png.

    Tous les conseils sont bons à prendre.
    bonne journée !

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par benoit1024 Voir le message
    Oui je compte faire un petit jeu de plateau.
    Là j'en suis au phase de tests pour me familiariser avec la bibliothèque.

    Ma question concernait principalement l'utilisation de TBGRABitmap.
    Comment gérer la transparence des png.
    Bonjour ! Intéressant projet. J'ai travaillé sur des choses de ce genre (avec BGRABitmap justement) donc je devrais pouvoir aider un peu.

    J'ai lu le code que vous avez posté : ça m'a paru bien fait (pour ce qui est de la gestion des images) mais si je pouvais exécuter le programme je me rendrais mieux compte. Pourrions-nous avoir le programme complet (avec les images) ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Invité
    Invité(e)
    Par défaut
    Voici le projet. Il contient différent tests.
    Tous vos commentaires seront bienvenus.

    Je viens de commencer un petit taquin, je vous le partagerai quand il sera avancé.
    Fichiers attachés Fichiers attachés
    Dernière modification par Alcatîz ; 28/05/2017 à 22h11. Motif: orthographe

Discussions similaires

  1. déplacer image entre picturebox
    Par bakman dans le forum VB.NET
    Réponses: 11
    Dernier message: 31/03/2009, 14h14
  2. [AJAX] Ajax et glisser déplacer image
    Par Interface dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/01/2009, 16h39
  3. Déplacer image dans jeu de plateau
    Par kawasaki dans le forum Débuter
    Réponses: 10
    Dernier message: 29/02/2008, 15h48
  4. déplacer Image dans un JPanel
    Par Tyver dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 09/12/2007, 22h32
  5. script pour déplacer image avec souris, pb avec Netscape
    Par jejerome dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/11/2006, 17h59

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