Déplacement d'une image

Résolu
narizuke Messages postés 38 Date d'inscription mardi 31 mai 2011 Statut Membre Dernière intervention 9 février 2014 - 28 déc. 2011 à 11:54
narizuke Messages postés 38 Date d'inscription mardi 31 mai 2011 Statut Membre 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.

5 réponses

StagiaireMsl Messages postés 43 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 22 avril 2013 3
28 déc. 2011 à 14:21
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.
3
narizuke Messages postés 38 Date d'inscription mardi 31 mai 2011 Statut Membre Dernière intervention 9 février 2014
28 déc. 2011 à 14:07
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;
}
}
}
}
0
narizuke Messages postés 38 Date d'inscription mardi 31 mai 2011 Statut Membre Dernière intervention 9 février 2014
28 déc. 2011 à 14:41
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".
0
StagiaireMsl Messages postés 43 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 22 avril 2013 3
28 déc. 2011 à 16:49
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.
0

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

Posez votre question
narizuke Messages postés 38 Date d'inscription mardi 31 mai 2011 Statut Membre Dernière intervention 9 février 2014
28 déc. 2011 à 17:31
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.
0
Rejoignez-nous