繁体   English   中英

使用计时器移动PictureBox

[英]Move PictureBox using Timer

我的目标是来回移动图片框。 我的问题是如何执行此操作。

我写了以下内容:

    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#编写。

干杯。

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

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

System.Windows.SystemParameters.PrimaryScreenWidth 

编辑:

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

设置一个在负值和正值之间切换的变量,以使其向左和向右移动。 您可以通过乘以-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);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM