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

时间:2015-01-15 19:26:11

标签: c# winforms

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

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

if (player.Bounds.IntersectsWith(gem.Bounds))
{
    points += 1;
    points_lbl.Text = points.ToString();
}

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

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

1 个答案:

答案 0 :(得分:6)

这很可能,而且不是黑客攻击。

通过gem.Hide()隐藏控件或将其从父窗体的控件集合中移除(form.Controls.Remove(gem))。

但请注意,由于听起来您通过设计器将图片框添加到表单中,gem实例变量仍将引用该控件,即使它已被隐藏或不再存在于控件中形式的控制层次。因此,您对玩家碰撞的测试仍然会通过,因为测试只是数学上的,并且如果表单可见/附加到表单上,则不关心。

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

请勿致电Dispose(),除非您真的不想再次使用该实例。