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

narizuke 38 Messages postés mardi 31 mai 2011Date d'inscription 9 février 2014 Dernière intervention - 28 déc. 2011 à 11:54 - Dernière réponse : narizuke 38 Messages postés mardi 31 mai 2011Date d'inscription 9 février 2014 Dernière intervention
- 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
StagiaireMsl 43 Messages postés mardi 19 avril 2011Date d'inscription 22 avril 2013 Dernière intervention - 28 déc. 2011 à 14:21
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.

Merci StagiaireMsl 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de StagiaireMsl
narizuke 38 Messages postés mardi 31 mai 2011Date d'inscription 9 février 2014 Dernière intervention - 28 déc. 2011 à 14:07
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
narizuke 38 Messages postés mardi 31 mai 2011Date d'inscription 9 février 2014 Dernière intervention - 28 déc. 2011 à 14:41
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
StagiaireMsl 43 Messages postés mardi 19 avril 2011Date d'inscription 22 avril 2013 Dernière intervention - 28 déc. 2011 à 16:49
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
narizuke 38 Messages postés mardi 31 mai 2011Date d'inscription 9 février 2014 Dernière intervention - 28 déc. 2011 à 17:31
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.