2
我正在創建一個類似汽車遊戲的應用程序,它使用兩個鍵,即左鍵和右鍵。我正在使用一個橢圓並在兩個方向上移動它。當我啓動應用程序並將橢圓移動到右鍵時,按下左鍵時它會正常工作,並且我正在使用另一個必須不斷向下移動的橢圓。 下面是我用來移動橢圓的兩個函數。以及表單的key_down事件:C#GDI將橢圓從一個點移動到另一個並返回
public void MoveLeft()
{
if (startPoint.Y > 100)
{
startPoint.Y = 1;
}
while (startPoint.Y > 1)
{
graphics.Clear(BackColor);
if (startPoint.Y > this.ClientSize.Height)
startPoint.Y = 0;
startPoint.Y += 5;
graphics.DrawEllipse(Pens.Black, new Rectangle(carPoint, new Size(100, 100)));
graphics.FillEllipse(new SolidBrush(Color.Green), new Rectangle(carPoint, new Size(100, 100)));
Move();
System.Threading.Thread.Sleep(50);
}
}
public void MoveRight()
{
while (startPoint.Y > 1)
{
if (startPoint.Y > this.ClientSize.Height)
startPoint.Y = 0;
startPoint.Y += 5;
carPoint = new Point(100, 250);
graphics.DrawEllipse(Pens.Black, new Rectangle(carPoint, new Size(100, 100)));
graphics.FillEllipse(new SolidBrush(Color.Green), new Rectangle(carPoint, new Size(100, 100)));
Move();
System.Threading.Thread.Sleep(50);
graphics.Clear(BackColor);
}
}
public void Move()
{
graphics.DrawEllipse(Pens.Black, new Rectangle(startPoint, new Size(100, 100)));
graphics.FillEllipse(new TextureBrush(image), new Rectangle(startPoint, new Size(100, 100)));
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyData)
{
case Keys.Right:
{
moveCar = new Thread(new ThreadStart(MoveRight));
moveCar.Start();
}
break;
case Keys.Left:
{
if (moveCar != null)
{
moveCar.Abort();
moveCar = null;
}
moveCar = new Thread(new ThreadStart(MoveLeft));
moveCar.Start();
}
break;
}
}
我的第一感覺是你沒有使用正確的工具。當然你可以實現你的目標,但是XNA框架比老派的gdi繪圖更適合構建遊戲。即使WPF可以更好。你是否堅持使用windows form + gdi,或者你可以使用其他技術? –
我確實有使用其他技術的選擇,但我試圖儘可能多地學習GDI – user1407955
gdi是一項衰退的技術。不知道你的動機和/或要求,但我建議轉向更新的技術。 –