Déplacement d'une image [Résolu]

Messages postés
38
Date d'inscription
mardi 31 mai 2011
Dernière intervention
9 février 2014
- - Dernière réponse : narizuke
Messages postés
38
Date d'inscription
mardi 31 mai 2011
Dernière intervention
9 février 2014
- 28 déc. 2011 à 17:31
Bonjour à tous,

Je suis actuellement en train de développer un logiciel où je dois faire déplacer des images. Celle-ci sont placées dans des pictureBox. Elles doivent se déplacer aléatoirement sur l'écran (en horizontal, vertical, diagonal). L'image se déplace bien mais lorsqu'elle tape sur l'un des 4 coins de ma richTextBox, le déplacement ne se fait plus correctement. Par exemple si elle tape en haut à droite, l'image repart sur la gauche en horizontal puis sort de l'écran où alors repart sur la droite toujours en horizontal.
Je vous montre un peu le code que j'ai utilisé :

// Déplacement de l'image en "diagonale" (vers le bas et la droite)
Image_Choisie.Top = Image_Choisie.Top + Vertical;
Image_Choisie.Left = Image_Choisie.Left + Horizontal1;

//-----------------------------------------
//On teste l'endroit où l'image a tapé
//-----------------------------------------
// Si l'image touche le côte gauche de la feuille :
// on repart vers la droite...
if (Image_Choisie.Left < 0)
Horizontal1 = -1 * Horizontal1;
else
{
// Si l'image touche le côte droit de la feuille :
//on repart vers la gauche...
if (Image_Choisie.Left + Image_Choisie.Width + 20 > richTextBox1.Width)
Horizontal1 = -1 * Horizontal1;
else
{

// Si l'image touche le haut de la feuille :
// on repart vers le bas
if (Image_Choisie.Top < 100)
{
Vertical = -1 * Vertical;
}
else
{
// Si l'image touche le bas de la feuille :
// on repart vers le haut
if (Image_Choisie.Top + Image_Choisie.Height > 510)
{
Vertical = -1 * Vertical;
}
}
}
}

J'aurais voulu savoir si mon code était correcte ou si vous saviez comment je pourrais m'y prendre pour déplacer une image.
Je vous remercie d'avance pour votre aide.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
43
Date d'inscription
mardi 19 avril 2011
Dernière intervention
22 avril 2013
3
Merci
Salut,

Déjà, en voyant ton code, je remarque que l'horizontal et le vertical n'ont aucun lien...
Tu peux donc enlever un "else" car si ton image arrive parfaitement dans un coin, il va d'abord changer l'axe horizontal, et changer ton axe vertical seulement au prochain déplacement.

De plus, ton "Image_Choisie.Left" est le nombre de pixel a gauche dans le conteneur! et non de ton formulaire.

Donc je ne comprend pas ton :

Image_Choisie.Left + Image_Choisie.Width + 20


Sinon ton idée d'additionner le +1/-1 est assez ingénieux ^^
// Si l'image touche le côte gauche de la feuille :
// on repart vers la droite...
if (Image_Choisie.Left < 0)
{
    Horizontal1 *= -1;
}
else
{
    // Si l'image touche le côte droit de la feuille :
    //on repart vers la gauche...
    if (Image_Choisie.Left + Image_Choisie.Width > richTextBox1.Width)
    {
        Horizontal1 *= -1;
    }
}

// Si l'image touche le haut de la feuille : 
// on repart vers le bas
if (Image_Choisie.Top < 0)
{
    Vertical *= -1;
}
else
{
    // Si l'image touche le bas de la feuille : 
    // on repart vers le haut
    if (Image_Choisie.Top + Image_Choisie.Height > richTextBox1.Height)
    {
    Vertical *= -1;
    }
}


Celui qui n expérimente rien ne se trompe qu'une seule fois.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de StagiaireMsl
Messages postés
38
Date d'inscription
mardi 31 mai 2011
Dernière intervention
9 février 2014
0
Merci
Désolé, j'aurais pu mettre mon code dans des balises, je le remets donc ici :

// Déplacement de l'image en "diagonale" (vers le bas et la droite)
Image_Choisie.Top = Image_Choisie.Top + Vertical;
Image_Choisie.Left = Image_Choisie.Left + Horizontal1;

//-----------------------------------------
//On teste l'endroit où l'image a tapé
//-----------------------------------------
// Si l'image touche le côte gauche de la feuille :
// on repart vers la droite...
if (Image_Choisie.Left < 0)
Horizontal1 = -1 * Horizontal1;
else
{
// Si l'image touche le côte droit de la feuille :
//on repart vers la gauche...
if (Image_Choisie.Left + Image_Choisie.Width + 20 > richTextBox1.Width)
Horizontal1 = -1 * Horizontal1;
else
{

// Si l'image touche le haut de la feuille : 
// on repart vers le bas
if (Image_Choisie.Top < 100)
{
Vertical = -1 * Vertical;
}
else
{
// Si l'image touche le bas de la feuille : 
// on repart vers le haut
if (Image_Choisie.Top + Image_Choisie.Height > 510)
{
Vertical = -1 * Vertical;
}
}
}
}
Commenter la réponse de narizuke
Messages postés
38
Date d'inscription
mardi 31 mai 2011
Dernière intervention
9 février 2014
0
Merci
Salut,

Je te remercie beaucoup pour ta réponse qui fonctionne correctement. Je n'ai plus de problèmes. Je te remercie grandement, ça fait des semaines que je bloque sur ce soucis d'affichage. C'est vrai que j'avais pas pensé à différencier les vertical et horizontal.

Image_Choisie.Left + Image_Choisie.Width + 20

Pour cette ligne de code, le " + 20 " ne sert strictement à rien, à force de faire des tests, j'ai laissé le "+ 20".
Commenter la réponse de narizuke
Messages postés
43
Date d'inscription
mardi 19 avril 2011
Dernière intervention
22 avril 2013
0
Merci
Je me suis aussi amusé à faire des images qui rebondissent contre une paroi, et il est vrai qu'il est différent de voir des choses graphiquement et en code.

Bonne continuation

PS: dans mon code j'ai mis :
Horizontal1 *= -1;

C'est équivalent à :
Horizontal1 = Horizontal1 * -1;

Une astuce pour éviter de recopier les variables 15 fois ^^

Cette astuce fonctionne aussi avec += , -= , /= , *= , ...

Celui qui n expérimente rien ne se trompe qu'une seule fois.
Commenter la réponse de StagiaireMsl
Messages postés
38
Date d'inscription
mardi 31 mai 2011
Dernière intervention
9 février 2014
0
Merci
Ouais je sais qu'on peut utiliser le :
Horizontal1 *= -1;

et c'est vrai que c'est super pratique, mais comme le code va être lu par un non développeur, ça reste plus lisible en mettant :
Horizontal1 = Horizontal1 * -1;

En tout cas, encore merci.
Commenter la réponse de narizuke

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.