繁体   English   中英

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

[英]How can I remove / delete a picturebox during runtime?

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

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

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

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

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

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

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

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

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

除非您真的不想再次使用该实例,否则不要调用Dispose()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM