使用Timer移动PictureBox

时间:2015-01-15 22:39:51

标签: c#

我的目标是来回移动一个图片盒。我的问题是如何做到这一点。

我写了以下内容:

    int x = enemy.Location.X;
    int y = enemy.Location.Y;
    enemy.Location = new Point(x+-1, y);

这会将图片框移到屏幕外左侧。向左移动后,我希望它向右移动,以便它在一个连续的循环中来回移动。

我是菜鸟,我试过了:

    if (x < 40)
        enemy.Location = new Point(x - -100, y);
    else if (x > 400)
        enemy.Location = new Point(x - 5, y);

这证明是不成功的 - 盒子似乎没有移动到达像素40.

是否有一个简单的解决方案,你可以刺激我,或者我为自己挖了一个早期的坟墓?!

我应该说明:我按照大学作业要求用C#写作。

干杯。

2 个答案:

答案 0 :(得分:1)

向左移动时,当x位置达到0时,改变方向并向右移动。

向右移动时,您需要使用屏幕宽度减去图片框的宽度。

System.Windows.SystemParameters.PrimaryScreenWidth 

编辑:

或者更好的是,使用表单的宽度减去图片框的宽度。如果它没有最大化,它仍然可以工作。

答案 1 :(得分:0)

设置一个在负值和正值之间切换的变量,使其左右移动。您可以通过乘以-1来切换方向。然后,您只需将该变量添加到当前X值,如下所示:

    private int direction = -1; // this can be values other than 1 to make it jump farther each move

    private void timer1_Tick(object sender, EventArgs e)
    {
        int x = enemy.Location.X + direction;
        if (x <= 0)
        {
            direction = -1 * direction;
            x = 0;
        }
        else if (x >= this.ClientRectangle.Width - enemy.Width)
        {
            direction = -1 * direction;
            x = this.ClientRectangle.Width - enemy.Width;
        }
        enemy.Location = new Point(x, enemy.Location.Y);
    }