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)在哪里初始化会有帮助。非常感谢!非常感谢!