Gestion des sprites avec ImageList en Delphi ?

Gestion des sprites avec ImageList en Delphi ? - Delphi/Pascal - Programmation

Marsh Posté le 15-05-2005 à 16:35:23    

Voilà je débute en delphi et je tente de réaliser une animation 2D via des sprites et ImageList
Le problème c'est que lorsque j'affiche l'image suivante d'ImageList le masque de l'image précédente reste affiché.
Je voulais savoir comment "effacer" completement l'image précédente.
Merci d'avance :jap:

Reply

Marsh Posté le 15-05-2005 à 16:35:23   

Reply

Marsh Posté le 16-05-2005 à 07:17:47    

:bounce:

Reply

Marsh Posté le 16-05-2005 à 16:40:17    

Tu affiches tes images sur quoi ? Il suffit peut-être de dessiner un rectangle (FillRect ou un truc du genre) sur le canvas du composant sur lequel tu affiches tes images.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-05-2005 à 18:30:00    

le sprite s'affiche sur un bitmap, le tout est dans une PaintBox.
J'ai essayé de copier un rectangle du fond pour le coller sur le sprite (pour l'effacer) mais je dois mal m'y prendre puisque ça n'efface rien du tout :??:
 
voilà la partie du code :

Code :
  1. fond:=Tbitmap.create;  //écran tampon
  2. fond.Assign(image1.Picture.Bitmap);   //on lui assigne le fond
  3. //copie de la zone du fond située sous le sprite
  4.   rect1.left:=g_perso.left;
  5.   rect1.top:=g_perso.top;
  6.   rect1.bottom:=rect1.top+g_perso.height;
  7.   rect1.right:=rect1.left+g_perso.width;
  8.   fond.canvas.copyrect(rect1,image1.canvas,rect1);
  9. g_perso.Left:=g_perso.Left-5 ; //déplacement du sprite
  10.   Paintbox1.canvas.draw(0,0,fond);  //on affiche le fond
  11.   listperso.GetBitmap(1,g_perso.Picture.Bitmap); //on y colle le sprite déplacé
  12. fond.free


 
Voilà je ne vois pas où il y a un problème  :??:

Reply

Marsh Posté le 16-05-2005 à 18:39:24    

C'est quoi image1 par rapport à g_perso ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-05-2005 à 18:48:52    

image1 est le fond sur lequel se déplace le sprite (c'est un bitmap)
g_perso est l'une des images du sprite (le 1er bitmap de l'ImageList "listperso" ).  
En gros j'ai voulu utiliser une zone tampon ("fond" ) pour redessiner le fond ("image1" ) en enlevant l'ancien sprite, puis de redessiner le sprite à sa nouvelle position, et enfin d'afficher le tout;
Mais j'ai dû me louper quelque part :D

Reply

Marsh Posté le 16-05-2005 à 18:58:13    

Ta copie du fond tu dois pas la refaire chaque fois, tu dois la faire au début puis la conserver, non ?
 
Et la PaintBox, c'est quoi son rôle par rapport à image1 ?
 
Je vois toujours pas l'intérêt de g_perso en fait [:figti]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-05-2005 à 07:18:44    

antp a écrit :

Ta copie du fond tu dois pas la refaire chaque fois, tu dois la faire au début puis la conserver, non ?
 
Et la PaintBox, c'est quoi son rôle par rapport à image1 ?
 
Je vois toujours pas l'intérêt de g_perso en fait [:figti]


 
PaintBox c'est l'élément qui contient les 3 images
g_perso c'est le sprite lui-même
 
Je vais essayer de sortir la copie du fond de la boucle alors ;)

Reply

Marsh Posté le 17-05-2005 à 09:59:59    

Je vois pas trop l'intérêt de la paintbox si tu dessines déjà tout sur un TImage
Pareil pour le sprite, pourquoi ne pas le dessiner directement de l'imagelist vers l'image principale sans passer par une image intermédiaire ?


Message édité par antp le 17-05-2005 à 10:08:36

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-05-2005 à 13:26:36    

Pour la paintbox je l'avais rajoutée pour tester, en effet ça marchait pareil sans.
Pour le sprite, je le copiais dans une autre image pour récupérer sa taille et sa position (je sais pas comment connaitre ces infos à partir de l'imagelist :D)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed