Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème de transparence et déplacements d'image [ Multimédia / Image & Vidéo ] (Abyss24)

samedi 24 mars 2007 à 14:03:30 | Problème de transparence et déplacements d'image

Abyss24

Bonjour à tous, je suis débutant en VB.net.
Dans le cadre de mes étude, je réalise un programme : une petite tortue se déplaçant dans un environement graphique ( une picture box dans une aire de jeu ).

Un problème est survenu, j'ai essayé avec une image de tortue .png et .gif et c'est le même constat. Dans les propriété de la picture box, j'ai choisi un fond transparent : cela ne pose pas de problème lorsque que l'image est statique. Cependant des qu'elle commence à se déplacer ( j'utilise les coordonnées de l'image pour la faire déplacer, monimage.Left = x, monimage.Top = y ), l'image disparait progressivement ( comme si la picture box se déplacée sans l'image ) et ne réapparait qu'un fois le trajet terminé.
Quelqu'un aurait-il une idée d'ou cela peut venir, et sinon est-ce que je pourrais utulisé d'auters fonctionnalités pour manipuler les images et qui me permette de faire ce que je désire ?

Maxime

samedi 24 mars 2007 à 14:38:46 | Re : Problème de transparence et déplacements d'image

jmfmarques

Membre Club
D'où celà vient ?

Mais...
On le saura peut-être en voyant ton code (pour l'instant totalement invisible) et ses explications (commentaires).

samedi 24 mars 2007 à 15:32:30 | Re : Problème de transparence et déplacements d'image

Abyss24

Voici le code de ma procédure de déplacement. Je donne tout car je ne savais pas quoi selectionner.

Private Sub depart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles depart.Click

        'Vitesse de déplacement de la tortue
        Const rafraichissement = 1

        Dim i As Integer
        Dim rayon As Single
        Dim anglerad2 As Single
        Dim avancex As Integer
        Dim avancey As Integer
        Dim distanceX As Integer
        Dim distanceY As Integer
        Dim a As Single
        Dim b As Single

        'Masque le bouton durant toute la durée des déplacements
        depart.Visible = False

        'Permet d'attendre que le bouton se masque avant de continuer à éxécuter le code
        'C'est à dire que le code précédent le doevents doit être éxécuté avant de continuer le code
        Application.DoEvents()

            For i = 1 To trajet
                'Calcul du coefficient entre le point de départ du premier trajet de la tortue et son point d'arrivée
                If lescoordonnee(i).x - lescoordonnee(i - 1).x <> 0 Then
                    a = (lescoordonnee(i).y - lescoordonnee(i - 1).y) / ((lescoordonnee(i).x - lescoordonnee(i - 1).x))
                    b = lescoordonnee(i).y - a * lescoordonnee(i).x
                Else
                    'Cas ou le coefficiant directeur n'est pas calculable
                    a = 0
                    b = lescoordonnee(i).y
                End If

                'Calcul de la distance entre les 2 points ( point de départ et d'arrivée ) rac(x² + y²)
                rayon = ((lescoordonnee(i).x - lescoordonnee(i - 1).x) ^ 2 + (lescoordonnee(i).y - lescoordonnee(i - 1).y) ^ 2) ^ (1 / 2)

                'DistanceX représente l'absisse du point d'arrivée moins celle du point de départ
                distanceX = lescoordonnee(i).x - lescoordonnee(i - 1).x

                'DistanceX représente l'ordonnée du point d'arrivée moins celle du point de départ
                distanceY = lescoordonnee(i).y - lescoordonnee(i - 1).y

                If distanceX > 0 Then  'Si il y a un déplacement vers la droite
                    anglerad2 = Atan(distanceY / distanceX)
                Else
                    If distanceX < 0 Then  'Si il y a un déplacement vers la gauche
                        anglerad2 = Atan(distanceY / distanceX)
                        anglerad2 = anglerad2 + PI
                    Else
                        If distanceY > 0 Then  'Si il y a un déplacement vers le bas
                            anglerad2 = PI / 2
                        Else
                            If distanceY < 0 Then  'Si il y a un déplacement vers le haut
                                anglerad2 = -PI / 2
                            Else
                                'Débogage
                                MsgBox("Erreur. Le point n'a pas bougé /!\")
                            End If
                        End If
                    End If
                End If

                'Initialisation de avanceX et avanceY ( valeur ne faussant pas les calculs suivants )
                '/!\ Ne pas enlever cette initialisation
                avancex = 0
                avancey = 0

                'Les trajets de la tortue sont décomposées en 4 sortes de déplacement suivant des angles ( tout les PI/4 )

                'Le principe est de calculer y par la fonction a chaque itération de la boucle ( on utilise x pour incrémenter) ou inversement
                'On a x on calcule y, on ajoute +1 à x et on calcule à nouveau y et ainsi de suite
                'Tout cela permet de fluidifier les mouvements de la tortue ( la tortue fait un trajet vertical par exemple, cela ne servirait à rien de faire varier x ),
                'C'est pourquoi les trajets sont décomposés en 4 traitements
                If (anglerad2 Mod 2 * PI) >= ((-PI / 4) Mod 2 * PI) And (anglerad2 Mod 2 * PI) < ((PI / 4) Mod 2 * PI) Then
                    avancex = lescoordonnee(i - 1).x
                    Do
                        'x<-- x + 1 signifie que la tortue avance vers la droite
                        avancex = avancex + 1
                        avancey = CInt(a * avancex + b)
                        'Permet de positionner la tortue en fonction de x et y sur l'aire de jeu
                        latortue.Left = avancex
                        latortue.Top = avancey
                        System.Threading.Thread.Sleep(rafraichissement)
                    Loop Until avancex = lescoordonnee(i).x
                Else
                    If (anglerad2 Mod 2 * PI) >= ((PI / 4) Mod 2 * PI) And (anglerad2 Mod 2 * PI) < ((3 * PI / 4) Mod 2 * PI) Then
                        avancey = lescoordonnee(i - 1).y
                        Do
                            'y<-- y + 1 signifie que la tortue avance vers le bas
                            avancey = avancey + 1
                            If a <> 0 Then
                                avancex = CInt((avancey - b) / a)
                            Else
                                'Cas particulier où le trajet est strictement vertical ( vers le bas )
                                avancex = lescoordonnee(i).x
                            End If
                            latortue.Left = avancex
                            latortue.Top = avancey
                            System.Threading.Thread.Sleep(rafraichissement)
                        Loop Until avancey = lescoordonnee(i).y
                    Else
                        If (anglerad2 Mod 2 * PI) >= ((3 * PI / 4) Mod 2 * PI) And (anglerad2 Mod 2 * PI) < ((5 * PI / 4) Mod 2 * PI) Then
                            avancex = lescoordonnee(i - 1).x
                            Do
                                'x<-- x + 1 signifie que la tortue avance vers la gauche
                                avancex = avancex - 1
                                avancey = CInt(a * avancex + b)
                                latortue.Left = avancex
                                latortue.Top = avancey
                                System.Threading.Thread.Sleep(rafraichissement)
                            Loop Until avancex = lescoordonnee(i).x
                            'anglerad2 >= (-3 * PI / 4) and anglerad2 < (-PI / 4 )
                        Else
                            avancey = lescoordonnee(i - 1).y
                            Do
                                'y<-- y - 1 signifie que la tortue avance vers le haut
                                avancey = avancey - 1
                                If a <> 0 Then
                                    avancex = CInt((avancey - b) / a)
                                Else
                                    'Cas particulier où le trajet est strictement vertical ( vers le haut )
                                    avancex = lescoordonnee(i).x
                                End If
                                latortue.Left = avancex
                                latortue.Top = avancey
                                System.Threading.Thread.Sleep(rafraichissement)
                            Loop Until avancey = lescoordonnee(i).y
                        End If
                    End If
                End If
        Next

        'Le bouton se réaffiche
        depart.Visible = True
    End Sub

samedi 24 mars 2007 à 16:00:40 | Re : Problème de transparence et déplacements d'image

Abyss24

Réponse acceptée !
Mon problème est en partie résolu, ( en partie seulement ) il suffisait de mettre :
latortue.Left = avancex
latortue.Top = avancey
Application.DoEvents()

DoEvents permet de stopper l'éxécution de l'algorithme tant que tout les Threads ( ce sont les processus qui s'éxécutent en parallèle de l'algorithme tel que l'affichage, j'explique avec mes mot, je ne suis que débutant ^^ ) n'ont pas terminé leur éxécution.

Un problème réside, ma tortue se déplace dans un objet de type Panel ( constituant mon aire de jeu ) dans lequel j'ai inséré une image de décoration.
 
L'image de décoration semble ralentir l'éxecution de mon programme, on le vois car la tortue se déplace très lentement.

Ma question est quel est le format d'image le plus léger à traité sachant que l'image de fond peut être de n'importe quel format, l'image de tortue peut-être .gif ou .png ( format acceptant les effets de transparence ) ?
 
Y'a-t-il aussi une autre fonction que DoEvents que je puisse mettre en oeuvre afin d'accélérer mes traitements ?



Cette discussion est classé dans : problème, image, box, picture, transparence


Répondre à ce message

Sujets en rapport avec ce message

Picture Box [ par Pierre ] BonjourJe suis débutant en programmation avec Visual Basic, je n'ai aucune formation en programmationJ'avais une revue ou il y avait un petit programm Deplacement d'une image dans un picture box a l'aide de scrollbar [ par Bap ] Deplacement d'une image dans un picture box a l'aide de scrollbarVoila mon problemme si qlq sait faire ou a une piste je veux bienmerci.. comment imprimer une picture box avec des image.picture a l'interieur [ par toto ] comment imprimer une picture box avec des image.picture a l'interieurmerci comment imprimer une picture box avec des image.picture a l'interieur [ par toto ] comment imprimer une picture box avec des image.picture a l'interieurmerci comment imprimer une picture box avec des image.picture a l'interieur [ par toto ] comment imprimer une picture box avec des image.picture a l'interieurmerci rotation d'image dans un picture Box [ par tintin ] La question a déja été posée, mais aucune réponse efficace n'a été donnée. C'est pourquoi je me permet de reposer la question.J'ai essayer la solution au secour aidez-moi!!!! [ par tnt ] Salut j'ai un p'tit problème et ca fait 3 fois que je poste ma question! Donner moi des idées n'importe quoi! je charge une image dans un picture box ????? Comment récupérer la partie visible d'une image dans un picture box ?????? [ par tnt ] Salut j'ai un p'tit problème je charge une image dans un picture box et l'image est plus grande que le picture box.J'aimerais savoir comment recupérer Sauvegarder une image d'une Picture Box avec un commonDialog [ par lo4 ] Bonjour,J'aimerais savoir comment on peut sauvegarder une image d'un Picture Box à n'importe quel format gràce à un CommonDialog.SVP, écrivez la procé Sauvegarder une image d'une Picture Box avec un commonDialog [ par lo4 ] Bonjour,J'aimerais savoir comment on peut sauvegarder une image d'un Picture Box à n'importe quel format gràce à un CommonDialog.SVP, écrivez la procé


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,20 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.