Scintillement de contrôles lors d'un déplacement [Résolu]

Signaler
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013
-
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013
-
Bonjour à tous,

J'ai déjà cherché dans d'autres post/forums la réponse à mon problème mais je ne la trouve pas, et ce, sûrement parce que j'utilise une version très ancienne de Visual Basic (je ne sais même pas son nom), c'est à dire Visual Basic pour PPT 97 (J'ai fait de nombreux jeux avec et je n'ai jamais voulu "évoluer"...).

Je demande quand même au cas où

J'ai créé un code dans lequel appuyer sur une touche fait se déplacer un contrôle (image ou label peu importe).

J'ai une image en arrière plan de mon "Userform" (je pense que ça s'appelle "Form" aujourd'hui) et aussi une en arrière plan de mon contrôle).

Lorsque le contrôle se déplace, j'ai un effet de scintillement... Comme si le rafraichissement était trop lent. J'ai vu que certaines méthodes existent, mais je ne crois pas que dans ma version ce soit possible...

Les idées sur le sujet sont les bienvenues... Merci

32 réponses

Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013

Waw merci beaucoup pour ces idées ! Je plancherai dessus.

NHenry : oui je déteste les goto, mais je trouvais que cétait plus clair ici... J'avais mit des if elseif avant mais ça n'avait pas changé grand chose à mon problème.
En tout cas je ferai attention à l'avenir
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013

Acive : ce n'est pas très fluide, et il faut rajouter le
AndAlso Control IsNot Boule...
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013

Bon je pense qu'en mélangeant un peu ce qu'on dit NHenry et Acive, j'ai obtenu un résultat satisfaisant. Mais je plancherai sur les Container, Panel, le Graphics etc.

Solution :

   Private Sub Controle_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        For Each Control In Me.Controls
            If e.KeyCode = Keys.Q AndAlso Control IsNot Boule Then
                Control.Location = New Point(Control.left + 20, Control.top)
            ElseIf e.KeyCode = Keys.D AndAlso Control IsNot Boule Then
                Control.Location = New Point(Control.left - 20, Control.top)
            ElseIf e.KeyCode = Keys.Z AndAlso Control IsNot Boule Then
                Control.Location = New Point(Control.left, Control.top + 20)
            ElseIf e.KeyCode = Keys.S AndAlso Control IsNot Boule Then
                Control.Location = New Point(Control.left, Control.top - 20)
            End If
        Next

        If AnciennePlateforme.Tag = "Gauche" And AnciennePlateforme.Left > -100 Then
            Plateformes()
        Else
            If AnciennePlateforme.Tag = "Droite" And AnciennePlateforme.Left < 100 Then
                Plateformes()
            Else
                If AnciennePlateforme.Tag = "Haut" And AnciennePlateforme.Top > -20 Then
                    Plateformes()
                End If
            End If
        End If

    End Sub

Non, t'avais raison sur une partie du raisonnement, essaye ça:
(ça marche chez moi)

Public Class Form1
    Dim ToucheUp As Boolean

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        ToucheUp = False
        Do
            For Each Control In Me.Controls
                Application.DoEvents()
                If Control IsNot Boule Then
                    If e.KeyCode Keys.Q Then Control.Location New Point(Control.left - 1, Control.top)
                    If e.KeyCode Keys.D Then Control.Location New Point(Control.left + 1, Control.top)
                    If e.KeyCode Keys.Z Then Control.Location New Point(Control.left, Control.top - 1)
                    If e.KeyCode Keys.S Then Control.Location New Point(Control.left, Control.top + 1)
                End If
            Next
        Loop Until ToucheUp = True
    End Sub

    Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
        ToucheUp = True
    End Sub

End Class



CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013

Non, toujours ce ralentissement...

Chez moi la vitesse est la même... que ce soit le left ou le top
Par contre si tu changes le nombre de pixels, ça va plus vite (normal)
Au lieu de +1 -1 pixel si on met +5 -5 ça n'a rien à voir.



CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013

Je pense que c'est parce que tu n'est pas dans la même configuration que moi. Il faut que tu ajoute des plateformes (d'autres picturebox) dans ta form, avec une image, que tu mette une image en fond de ta form, ainsi qu'une image sur ta boule statique. Tu "promene" ta boule sur les plateformes, et ca devrait ralentir par moment

Ah ok,
Je pense que tu dois avoir raison.
Alors essaye comme dit banana, tu mets les plateformes dans un conteneur (un Panel par exemple).

Moi je pense plutôt à une nouvelle Form qui sera superposée la Form1.

Ensuite tu joues avec le left/top des deux Forms uniquement et non celui de tous les contrôles au même temps.

En plus tu as d'autres propriétés sur une Form, qui peuvent te servir du genre Opacity, TransparencyKey etc.

Je sais, il faut que tu changes toute la structure mais à la fin tu peux mieux gérer ce que tu veux.

Je suis en train de faire un jeu une espèce de jeu avec des dés en ce moment et je me suis servi de cette méthode pour faire l'animation des dés...



CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013

Mais j'avoue ne rien comprendre à l'idée de superposition... ou de déplacement de form... Je vois mal comment ça pourrait faire se déplacer un objet ! Je vais me pencher là dessus...
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013

Dans le cas ou mes plateformes seraient prédéfinies, je vois à peu près l'idée (mais dans ce cas j'ai qu'à dessiner un fond avec plateformes sur un seul contrôle et le déplacer... Mais mes plateformes s'ajoutent au fur et a mesure par code, ce qui fait que je ne comprend pas l'idée du panel ou du form...

Je viens d'essayer c'est vrai qu'au début ça roule doucement et d'un coup il part comme une flèche...
Je cherche d'où ça vient aussi

Une question: la boule c'est une image que tu charges dans un picturebox?

une autre: quelle taille fait ta plateforme?



CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013

Oui je charge tout à partir des ressources de mon projet.
La plateforme peut faire soit 500 sur 70 soit 70 sur 500, si je me souviens bien. Niveau tailles de fichier, j'ai fait exprès de mettre des tailles très basses.