【发布时间】:2020-04-21 11:57:20
【问题描述】:
我正在制作简单的游戏,我需要在一定时间后删除图片而不冻结其他所有内容。我正在做爆炸事件:
private void Explode(int x, int y)
{
PictureBox explosion = new PictureBox();
explosion.Image = Properties.Resources.explosion;
explosion.SizeMode = PictureBoxSizeMode.StretchImage;
explosion.Size = new Size(50, 50);
explosion.Tag = "explosion";
explosion.Left = x;
explosion.Top = y;
this.Controls.Add(explosion);
explosion.BringToFront();
}
我已经有一个运行游戏的计时器,我想使用 if 语句在持续 3 秒时删除图片。
private void timer1_Tick(object sender, EventArgs e)
{
foreach (Control x in this.Controls)
{
if (x is PictureBox && x.Tag == "explosion")
{
if (EXPLOSION LASTS MORE THEN 3sec)
{
this.Controls.Remove(x);
}
}
}
}
我该怎么做?
【问题讨论】:
-
别忘了释放控件。
-
我知道这不是您所要求的,但是您在尝试将 WinForm
PictureBoxes 用作精灵或图形元素时会遇到严重的问题;性能会很糟糕,布局和字体缩放会让你不知所措,边距和填充会让对齐成为一场噩梦,闪烁将是无法控制的。通过在 UWP 中执行此操作或使用内置 sprites 的工具包,为自己节省几天的挫败感。 -
您可以使用 async/await 和
Task.Delay,而不是使用单个计时器来处理可能具有不同爆炸时间的多个图片框。
标签: c# .net winforms timer picturebox