所以在我的程序中,我希望一个对象向左或向右移动,具体取决于按住箭头键的方式。我移动了它们底部的图片框,所以当按下任意两个箭头键时,它们会沿着底部移动。但是当我按任意键时,图片框会移到顶部并在那里左右移动。我不知道为什么会这样。
这是Form1的代码,忽略Form2的代码;那是为了实验目的:
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();
}
}
}
}
}
答案 0 :(得分:1)
使用
pictureBox1.Location = new Point(pictureBox1.Left - 1, pictureBox1.Top);
和
pictureBox1.Location = new Point(pictureBox1.Left + 1, pictureBox1.Top);
分别指定当前使用的Y坐标。
当使用仅占用一个值的Point
构造函数时,系统期望这一个值包含X和Y坐标(作为值的高低字)并且将使用0作为Y坐标,因为您使用的X值太低,以至于该值的较高字为0。