我正在编写一个基本游戏.玩家通过触摸来收集宝石; 这为他的分数增加了+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.
这很可能,而且不是黑客.
通过gem.Hide()或从父窗体的控件集合(form.Controls.Remove(gem))中删除它来隐藏控件.
但请注意,由于听起来您通过设计器将图片框添加到表单中,因此gem实例变量仍会引用控件,即使它已隐藏或不再位于窗体的控件层次结构中.所以你对玩家碰撞的测试仍然会通过,因为测试只是数学上的,并不关心表单是否可见/附加到表单上.
因此,您还需要在碰撞检查中检查(gem.Visible例如,或者在删除实例时将实例清空并gem != null在进行进一步的碰撞测试之前检查实例).
Dispose()除非你真的不想再次使用那个实例,否则不要打电话.
| 归档时间: |
|
| 查看次数: |
3980 次 |
| 最近记录: |