Problème lors du déplacement d'une image

gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012 - 23 déc. 2011 à 13:27
 Utilisateur anonyme - 24 déc. 2011 à 16:16
Bonsoir, je vous explique mon problème, je veux faire déplacer une image, contenue dans une PictureBox aléatoirement dans ma fenêtre. J'y suis arrivé, cependant mon image étant une GIF, son fond est transparent, et lorsqu'elle se déplace, pendant quelques secondes elle garde le fond de l'image de fond de ma Form de là où elle se trouvée avant.
On m'a parlé du double buffering pour la redessiner correctement, mais je ne m'en suis jamais servi, alors je voudrais savoir si quelqu'un peut m'aider, lien, tuto, doc, technique d'approche ?

Voici mon code pour que vous voyez un peu mieux quel est mon problème:

Public Class Form1
    Dim Déplacement As Integer = 10
    Dim NewPosLeft, NewPosTop As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        PictureBox1.Left = 0
        PictureBox1.Top = 0
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'Timer1.Enabled = False
        Dim Rand As New Random
        NewPosLeft = Rand.Next(Me.Width - PictureBox1.Width)
        NewPosTop = Rand.Next(Me.Height - PictureBox1.Height)
        NewPosLeft = (Int(NewPosLeft / Déplacement)) * Déplacement
        NewPosTop = (Int(NewPosTop / Déplacement)) * Déplacement
        Do
            Application.DoEvents()
            System.Threading.Thread.Sleep(20)
            If PictureBox1.Top < NewPosTop Then
                PictureBox1.Top += Déplacement
            ElseIf PictureBox1.Top > NewPosTop Then
                PictureBox1.Top -= Déplacement
            End If
            If PictureBox1.Left < NewPosLeft Then
                PictureBox1.Left += Déplacement
            ElseIf PictureBox1.Left > NewPosLeft Then
                PictureBox1.Left -= Déplacement
            End If
        Loop Until PictureBox1.Left NewPosLeft And PictureBox1.Top NewPosTop
    End Sub
End Class

13 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
23 déc. 2011 à 14:46
a coup de Sleep et de DoEvents...
moyen, ca.

vitesse non constante, en plus...
donc en fonction du processeur, de la charge du pc, etc. ton image ira plus ou moins vite...

il faut ajouter un ratio, fonction du temps écoulé entre deux frames

pour que cela ne clignotte pas, tu peux tenter un SuspendLayout ResumeLayout pour inhiber les séquences de dessin intermediaires.

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012
23 déc. 2011 à 15:52
Bonjour, merci de m'avoir répondu.
On m'a déjà parlé de tout ça, mais mon problème n'est pas le clignotement, juste que lors de son déplacement le fond de mon image garde temporairement le fond de l'endroit où elle se trouvait avant sur la Form.
0
Utilisateur anonyme
23 déc. 2011 à 22:08
Bonsoir,

juste que lors de son déplacement le fond de mon image garde temporairement le fond de l'endroit où elle se trouvait avant sur la Form

Une petite astuce consiste à rendre invisible le picturebox (picturebox.visible = false) avant le déplacement. Puis de le rendre visible à nouveau après le déplacement.
0
gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012
24 déc. 2011 à 12:37
Non, faire ça est tout ce que je cherche à éviter, je ne veux pas une téléportation de l'image, mais un vrai déplacement réel.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
24 déc. 2011 à 12:55
Salut gege,

Ucfoutu voulait t'aider dans ton problème dans une discussion précédente, pourquoi t'as abandonné?

Tu devrais t'intéresser à ControlStyles et DoubleBuffer regarde un peu ce qu'ils disent chez MSDN :

http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=FR-FR&k=k%28SYSTEM.WINDOWS.FORMS.CONTROLSTYLES.DOUBLEBUFFER%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29;k%28DevLang-VB%29&rd=true

Bonnes fêtes



CF2i - Guadeloupe
Ingénierie Informatique
0
gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012
24 déc. 2011 à 14:30
Bonjour, et merci d'avoir répondu.

J'ai arrêté l'autre topic, parce que c'était un autre problème et parce que Ucfoutu était tétu (c'est tout a son honneur ) et ne voulait pas réellement comprendre mon problème, d'ailleurs vous vous trompez vous aussi. Je n'ai pas réellement un problème de scintillement et j'ai déjà essayé le double buffer.

J'ai posté mon code exprès pour que tout le monde puisse comprendre et m'aider, mais personne n'a l'air décidé à copier/coller ce bout de code
0
Utilisateur anonyme
24 déc. 2011 à 14:38
Vas y envoie ton code et ton gif aussi:
carlos_gwada@hotmail.fr

Je vais tester pour voir, mais je pense un peu au caractère transparent de ton gif.




CF2i - Guadeloupe
Ingénierie Informatique
0
gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012
24 déc. 2011 à 14:51
GIF ou PNG c'est pareil, tu as raison la faute vient de mes pixels transparents :(
Et mon code est celui du 1er poste de ce sujet, c'est le code de toute ma Form, tu ajoute un Timer, et une PictureBox, c'est tout
0
Utilisateur anonyme
24 déc. 2011 à 14:54
On avait essayé avec un jpeg normal ça fonctionnait bien, maintenant j'avais pas un gif ou png transparent sous la main.

Essaye avec un autre PNG pour voir ce que ça donne...




CF2i - Guadeloupe
Ingénierie Informatique
0
gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012
24 déc. 2011 à 15:04
Si il n'y a pas de fond transparent sur l'image contenue dans ma PictureBox ça marche, c'est évident puisque ce qui bug c'est le fond transparent.
0
Utilisateur anonyme
24 déc. 2011 à 15:09
Envoie moi juste ton PNG on va tester..


CF2i - Guadeloupe
Ingénierie Informatique
0
gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012
24 déc. 2011 à 16:03
Je t'ai envoyé tout mon projet donc avec le fond et le GIF, sur l'adresse hotmail que tu m'as passé juste avant.
Merci de t’intéresser autant à mon cas.
Bonne fêtes.
0
Utilisateur anonyme
24 déc. 2011 à 16:16
Bien reçu, je jette un oeuil...



CF2i - Guadeloupe
Ingénierie Informatique
0
Rejoignez-nous