如何在屏幕上移动对象
如何在WinForm中移动屏幕上的任何对象?如何在屏幕上移动对象
当我按下右键 - >对象会向右移动,直到我会按任何其他箭头键
,当我按左< - 对象会向左移动,直到我会按任何其他箭头键
所有的时间将是在运动中(像蛇游戏)的对象
感谢的提前
你需要一个游戏循环继续您最初的单一按发起的运动方向一个 按钮。
您可能想要继承Form并覆盖OnPaint方法。您可能还需要每次强制重新绘制Invalidate()。这将设置一个简单的游戏循环,并允许您很快更新屏幕。
在您的OnPaint方法中,您将根据自上次调用OnPaint方法以及上次按下哪个键以来经过了多长时间来更新对象的位置。您可能会通过使用如下的速度做到这一点:
newPosition = oldPosition + (elapsedTime * velocity)
速度的值将改变根据您按下哪个键(即负的左,正右)。您还需要一个变量和一些代码来跟踪它是水平移动还是垂直移动。
这是一个性能相当低的方法来完成这个(即它是一个黑客)。如果你想坚持使用Windows,但不需要太多工作就可以获得更好的性能,你可以看看XNA。如果您想要更好的性能并愿意做更多的工作,请使用DirectX和Win32 API查看Interop或将所有内容切换在一起。
捕获键,调整对象坐标。
假设您在2D中执行此操作,您可以设置一个x和y更改因子,您可以使用每个箭头按键正确设置。然后设置一个定时器以你想要的速度更新位置。当计时器滴答时,通过x/y变化因子调整对象的位置。
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大小的矩形。默认情况下,我会将该框的位置设置为向下。但是当您按下任意键时,例如: - 如果您按下左键箭头,则键事件将会触发,并且会将框的位置设置为向左,并且框将开始移动在左侧直到按下另一个键
添加一些解释并回答这个答案如何帮助OP修复当前问题 – 2016-01-14 06:49:06
请更改您的主题以更好地反映您的问题。并请添加一个winforms标签。我可以为你做这件事,但你现在应该更清楚。 – 2009-04-19 15:00:10