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();
}
}
}
}
}
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)'. –