如何在屏幕上移动对象

时间:2009-04-19 14:49:59

标签: c# winforms

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

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

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

对象一直在运动(如在Snake游戏中)

提前谢谢

5 个答案:

答案 0 :(得分:1)

您可能希望继承Form并覆盖OnPaint方法。你可能还需要Invalidate()每次强制重绘。这将设置一个简单的游戏循环,让您可以非常快速地更新屏幕。

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

newPosition = oldPosition + (elapsedTime * velocity)

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

这是一种非常低效的方法来实现这一点(即它是一个黑客)。如果你想坚持使用Windows但是在没有太多工作的情况下获得更好的性能,你可以考虑XNA。如果你想要更好的性能并且愿意做更多的工作,可以使用DirectX和Win32 API查看Interop,或者只是一起切换。

答案 1 :(得分:0)

只需按一下按钮,您就需要一个游戏循环来继续您最初启动的移动方向。

答案 2 :(得分:0)

捕获关键点,调整对象坐标。

答案 3 :(得分:0)

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

答案 4 :(得分: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大小的矩形。默认情况下,我将向下设置该框的位置。但是当您按任意键时,例如: - 如果您按下左键箭头,则按键事件将会触发,它将向左设置框的位置,框将开始移动在左边,直到按下另一个键