2009-04-19 142 views
0

如何在WinForm中移动屏幕上的任何对象?如何在屏幕上移动对象

当我按下右键 - >对象会向右移动,直到我会按任何其他箭头键

,当我按左< - 对象会向左移动,直到我会按任何其他箭头键

所有的时间将是在运动中(像蛇游戏)的对象

感谢的提前

+0

请更改您的主题以更好地反映您的问题。并请添加一个winforms标签。我可以为你做这件事,但你现在应该更清楚。 – 2009-04-19 15:00:10

回答

0

你需要一个游戏循环继续您最初的单一按发起的运动方向一个 按钮。

1

您可能想要继承Form并覆盖OnPaint方法。您可能还需要每次强制重新绘制Invalidate()。这将设置一个简单的游戏循环,并允许您很快更新屏幕。

在您的OnPaint方法中,您将根据自上次调用OnPaint方法以及上次按下哪个键以来经过了多长时间来更新对象的位置。您可能会通过使用如下的速度做到这一点:

newPosition = oldPosition + (elapsedTime * velocity) 

速度的值将改变根据您按下哪个键(即负的左,正右)。您还需要一个变量和一些代码来跟踪它是水平移动还是垂直移动。

这是一个性能相当低的方法来完成这个(即它是一个黑客)。如果你想坚持使用Windows,但不需要太多工作就可以获得更好的性能,你可以看看XNA。如果您想要更好的性能并愿意做更多的工作,请使用DirectX和Win32 API查看Interop或将所有内容切换在一起。

0

捕获键,调整对象坐标。

0

假设您在2D中执行此操作,您可以设置一个x和y更改因子,您可以使用每个箭头按键正确设置。然后设置一个定时器以你想要的速度更新位置。当计时器滴答时,通过x/y变化因子调整对象的位置。

0
enum position 
    { 
     Left,Right,up,down 
    } 
    private int _x; 
    private int _y; 
    private position _objposition; 
    public Form1() 
    { 
     InitializeComponent(); 
     _x = 50; 
     _y = 50; 
     _objposition = position.down; 
    } 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.FillRectangle(Brushes.DarkSlateBlue,_x,_y,100,100); 
    } 

    private void timertick_Tick(object sender, EventArgs e) 
    { 
     if (_objposition == position.Right) 
     { 
      _x += 10; 
     } 
     else if (_objposition == position.Left) 
     { 
      _x -= 10; 
     } 
     else if (_objposition == position.up) 
     { 
      _y -= 10; 
     } 
     else if (_objposition == position.down) 
     { 
      _y += 10; 
     } 
     Invalidate(); 
    } 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Left) 
     { 
      _objposition =position.Left; 
     } 
     else if (e.KeyCode == Keys.Right) 
     { 
      _objposition = position.Right; 
     } 
     else if (e.KeyCode == Keys.Up) 
     { 
      _objposition = position.up; 
     } 
     else if (e.KeyCode == Keys.Down) 
     { 
      _objposition = position.down; 
     } 
    } 
} 

这将创建一个50X50大小的矩形。默认情况下,我会将该框的位置设置为向下。但是当您按下任意键时,例如: - 如果您按下左键箭头,则键事件将会触发,并且会将框的位置设置为向左,并且框将开始移动在左侧直到按下另一个键

+0

添加一些解释并回答这个答案如何帮助OP修复当前问题 – 2016-01-14 06:49:06