C# 如何使每个PictureBox单独使用该方法

C# 如何使每个PictureBox单独使用该方法,c#,winforms,methods,picturebox,C#,Winforms,Methods,Picturebox,我正在制作一个游戏,你需要点击某些物体(使用PictureBoxs),这些物体以DVD屏幕保护程序的方式移动(边缘反弹)。问题是当屏幕上的PictureBox超过1个时。当一个触摸到边缘时,所有其他图片框将其X或Y速度值更改为负值,并开始移动,就像触摸到边缘一样。如何使每个PictureBox单独工作 运动引擎: private void MovementTimer_Tick(object sender, EventArgs e) //movement engine {

我正在制作一个游戏,你需要点击某些物体(使用
PictureBoxs
),这些物体以DVD屏幕保护程序的方式移动(边缘反弹)。问题是当屏幕上的PictureBox超过1个时。当一个触摸到边缘时,所有其他
图片框
将其X或Y速度值更改为负值,并开始移动,就像触摸到边缘一样。如何使每个
PictureBox
单独工作

运动引擎:

private void MovementTimer_Tick(object sender, EventArgs e) //movement engine
    {
        foreach (Control z in this.Controls)
        {
            if (z is PictureBox)
            {
                if (z.Location.X < 0 || z.Location.X + z.Width > Size.Width) //bouncing effect in horizontal
                {
                    x = -x;
                }
                if (z.Location.Y < 0 || z.Location.Y + z.Height > Size.Height) //bouncing effect in vertical
                {
                    y = -y;
                }
                z.Location = new Point(z.Location.X + x, z.Location.Y + y);
            }
        }
    }
private void MovementTimer\u Tick(对象发送方,事件参数)//移动引擎
{
foreach(此.Controls中的控件z)
{
如果(z是PictureBox)
{
if(z.Location.X<0 | | z.Location.X+z.Width>Size.Width)//水平方向的反弹效果
{
x=-x;
}
if(z.Location.Y<0 | | z.Location.Y+z.Height>Size.Height)//垂直方向上的反弹效果
{
y=-y;
}
z、 位置=新点(z.Location.X+X,z.Location.Y+Y);
}
}
}
生成图片框:

private void InitializePictureBox()
    {
        PictureBox[] pb = new PictureBox[12];
        for (int i = 0; i < 12; i++)
        {
            x = rng.Next(10, 16) * (rng.Next(0, 2) * 2 - 1); //velocity in horz dim
            y = rng.Next(10, 16) * (rng.Next(0, 2) * 2 - 1);  //velocity in vert dim
            locx = rng.Next(100, 500); //random locations
            locy = rng.Next(100, 500);
            pb[i] = new PictureBox(); 
            pb[i].Image = Image.FromFile("../red/rbr.png");
            pb[i].Location = new Point(locx, locy);
            pb[i].SizeMode = PictureBoxSizeMode.StretchImage;
            Controls.Add(pb[i]);
        }
    }
private void initializeEpictureBox()
{
PictureBox[]pb=新PictureBox[12];
对于(int i=0;i<12;i++)
{
x=rng.Next(10,16)*(rng.Next(0,2)*2-1);//水平方向的速度
y=rng.Next(10,16)*(rng.Next(0,2)*2-1);//垂直方向的速度
locx=rng.Next(100500);//随机位置
locy=下一个发动机转速(100500);
pb[i]=新的PictureBox();
pb[i].Image=Image.FromFile(“../red/rbr.png”);
pb[i]。位置=新点(locx,locy);
pb[i].SizeMode=PictureBoxSizeMode.StretchImage;
添加(pb[i]);
}
}

代替全局
x
y
变量,在每个PictureBox的
.Tag
属性中存储一个
,这样每个PictureBox都有自己的值,可以独立更改

因此,在您的
初始化EpictureBox()
方法中:

private void InitializePictureBox()
{
    PictureBox[] pb = new PictureBox[12];
    for (int i = 0; i < 12; i++)
    {
        x = rng.Next(10, 16) * (rng.Next(0, 2) * 2 - 1); //velocity in horz dim
        y = rng.Next(10, 16) * (rng.Next(0, 2) * 2 - 1);  //velocity in vert dim
        locx = rng.Next(100, 500); //random locations
        locy = rng.Next(100, 500);
        pb[i] = new PictureBox(); 
        pb[i].Image = Image.FromFile("../red/rbr.png");
        pb[i].Location = new Point(locx, locy);
        pb[i].SizeMode = PictureBoxSizeMode.StretchImage;

        pb[i].Tag = new Point(x, y); // <-- Store a Point() in the Tag()!

        Controls.Add(pb[i]);
    }
}
private void initializeEpictureBox()
{
PictureBox[]pb=新PictureBox[12];
对于(int i=0;i<12;i++)
{
x=rng.Next(10,16)*(rng.Next(0,2)*2-1);//水平方向的速度
y=rng.Next(10,16)*(rng.Next(0,2)*2-1);//垂直方向的速度
locx=rng.Next(100500);//随机位置
locy=下一个发动机转速(100500);
pb[i]=新的PictureBox();
pb[i].Image=Image.FromFile(“../red/rbr.png”);
pb[i]。位置=新点(locx,locy);
pb[i].SizeMode=PictureBoxSizeMode.StretchImage;
pb[i].Tag=新点(x,y);//大小.高度)//垂直方向的反弹效果
{
pt=新点(pt.X,-pt.Y);
}
z、 位置=新点(z.Location.X+pt.X,z.Location.Y+pt.Y);

z、 Tag=pt;//代替全局
x
y
变量,在每个PictureBox的
.Tag
属性中存储一个
,这样每个PictureBox都有自己的值,可以独立更改

因此,在您的
初始化EpictureBox()
方法中:

private void InitializePictureBox()
{
    PictureBox[] pb = new PictureBox[12];
    for (int i = 0; i < 12; i++)
    {
        x = rng.Next(10, 16) * (rng.Next(0, 2) * 2 - 1); //velocity in horz dim
        y = rng.Next(10, 16) * (rng.Next(0, 2) * 2 - 1);  //velocity in vert dim
        locx = rng.Next(100, 500); //random locations
        locy = rng.Next(100, 500);
        pb[i] = new PictureBox(); 
        pb[i].Image = Image.FromFile("../red/rbr.png");
        pb[i].Location = new Point(locx, locy);
        pb[i].SizeMode = PictureBoxSizeMode.StretchImage;

        pb[i].Tag = new Point(x, y); // <-- Store a Point() in the Tag()!

        Controls.Add(pb[i]);
    }
}
private void initializeEpictureBox()
{
PictureBox[]pb=新PictureBox[12];
对于(int i=0;i<12;i++)
{
x=rng.Next(10,16)*(rng.Next(0,2)*2-1);//水平方向的速度
y=rng.Next(10,16)*(rng.Next(0,2)*2-1);//垂直方向的速度
locx=rng.Next(100500);//随机位置
locy=下一个发动机转速(100500);
pb[i]=新的PictureBox();
pb[i].Image=Image.FromFile(“../red/rbr.png”);
pb[i]。位置=新点(locx,locy);
pb[i].SizeMode=PictureBoxSizeMode.StretchImage;
pb[i].Tag=新点(x,y);//大小.高度)//垂直方向的反弹效果
{
pt=新点(pt.X,-pt.Y);
}
z、 位置=新点(z.Location.X+pt.X,z.Location.Y+pt.Y);

z、 Tag=pt;//对我来说,知道变量(如x和y)在哪里初始化会有帮助。对我来说,知道变量(如x和y)在哪里初始化会有帮助。非常感谢!非常感谢!