자동차 게임과 유사한 응용 프로그램을 만들고 있는데, 왼쪽 및 오른쪽 키 두 개의 키를 사용합니다. 저는 타원을 사용하고 그것을 양방향으로 움직입니다. 응용 프로그램을 시작하고 타원을 오른쪽 키로 움직이면 왼쪽 키가 눌려 질 때 제대로 작동하고 끊임없이 아래로 내려 가야하는 다른 타원을 사용하고 있습니다. 다음은 타원을 이동하는 데 사용하는 두 가지 함수입니다. 형식에 대한 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가 더 좋을 수 있습니다. 당신은 창문 형태 + gdi에 집착합니까, 아니면 다른 기술을 사용할 수 있습니까? –
다른 기술을 사용할 수있는 옵션이 있지만 최대한 GDI를 배우려고 노력하고 있습니다. – user1407955
gdi는 감소하는 기술입니다. 당신의 동기 및/또는 요구 사항을 모르겠지만 새로운 기술로 이동하는 것이 좋습니다. –