2017-10-16 4 views
0

Donc, dans mon programme, je veux qu'un objet se déplace vers la gauche ou vers la droite en fonction de la touche fléchée enfoncée. J'ai déplacé la boîte d'image sur le fond de leur forme ainsi quand l'une des deux touches fléchées sont pressées elles se déplaceraient le long du fond. Mais ce qui se passe, c'est quand j'appuie sur une touche, la boîte d'image va vers le haut et se déplace à gauche et à droite là. Je ne sais pas pourquoi c'est.Pourquoi ma Picture Box passe-t-elle en haut du formulaire?

Voici le code pour Form1, ignorer le code pour Form2; qui est à des fins d'expérimentation en ce moment:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace Move 
{ 
public partial class Form1 : Form 
{ 
    public int lives = 0; 

    Form2 menu = new Form2(); 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_KeyDown(object sender, KeyEventArgs e) 
    { 

    } 

    private void pictureBox1_Click(object sender, EventArgs e) 
    { 

    } 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     int i; 

     for (i = 0; i < 500; i++) 
     { 

      if (e.KeyCode == Keys.Left) 
      { 
       pictureBox1.Location = new Point(pictureBox1.Left - 1); 
       Application.DoEvents(); 
       System.Threading.Thread.Sleep(10); 
      } 

      if (e.KeyCode == Keys.Right) 
      { 
       pictureBox1.Location = new Point(pictureBox1.Left + 1); 
       Application.DoEvents(); 
       System.Threading.Thread.Sleep(10); 
      } 

      var rect1 = new System.Drawing.Rectangle(pictureBox1.Location, pictureBox1.Size); 
      var rect2 = new System.Drawing.Rectangle(pictureBox2.Location, pictureBox2.Size); 

      if (rect1.IntersectsWith(rect2)) 
      { 
       MessageBox.Show("Game Over!"); 
       System.Threading.Thread.Sleep(1000); 
       Application.Exit(); 
      } 


      if (e.KeyCode == Keys.Down) 
      { 
       this.Hide(); 
       menu.Show(); 



      } 
     } 


    } 
} 

} 
+1

Un point prend généralement 2 arguments. Si vous ne passez pas la seconde, il vaut évidemment par défaut 0. y = 0 est le haut de votre formulaire Windows. Changez vos nouveaux points en 'new Point (pictureBox1.Left +/- 1, pictureBox1.Top)'. –

Répondre

1

Utilisez

pictureBox1.Location = new Point(pictureBox1.Left - 1, pictureBox1.Top); 

et

pictureBox1.Location = new Point(pictureBox1.Left + 1, pictureBox1.Top); 

respectivement pour spécifier la coordonnée Y actuellement utilisé. Lorsque vous utilisez le constructeur de Point qui prend une seule valeur, le système s'attend à ce que cette valeur contienne à la fois les coordonnées X et Y (comme mot supérieur et inférieur de la valeur) et utilisera 0 pour la coordonnée Y parce que le paramètre . Les valeurs X que vous utilisez sont si faibles que le mot supérieur de la valeur est 0.

+0

merci pour le conseil, j'étais sceptique de ce qui n'allait pas et vous m'a rassuré! –