如何在运行时删除/删除图片框?

4 c# winforms

我正在编写一个基本游戏.玩家通过触摸来收集宝石; 这为他的分数增加了+1.宝石是一个图片盒,我想在收集后处理它.

据我所知,这是不可能的,但可能有一个hacky解决方案.这是我的代码 - 我将继续研究并同时研究这个问题.如果有人可以提供帮助,我真的很感激!

if (player.Bounds.IntersectsWith(gem.Bounds))
{
    points += 1;
    points_lbl.Text = points.ToString();
}
Run Code Online (Sandbox Code Playgroud)

这有效.然而,宝石保持在屏幕上 - 所以玩家获得无限分.

我试过gem.Dispose(); 但这只是"隐藏"了图片框,所以碰撞仍然存在.gem = null; 崩溃了游戏.请不要XNA.

Jos*_*osh 6

这很可能,而且不是黑客.

通过gem.Hide()或从父窗体的控件集合(form.Controls.Remove(gem))中删除它来隐藏控件.

但请注意,由于听起来您通过设计器将图片框添加到表单中,因此gem实例变量仍会引用控件,即使它已隐藏或不再位于窗体的控件层次结构中.所以你对玩家碰撞的测试仍然会通过,因为测试只是数学上的,并不关心表单是否可见/附加到表单上.

因此,您还需要在碰撞检查中检查(gem.Visible例如,或者在删除实例时将实例清空并gem != null在进行进一步的碰撞测试之前检查实例).

Dispose()除非你真的不想再次使用那个实例,否则不要打电话.