我一直在开发一款游戏,我在这款游戏的碰撞部分遇到了问题,我不确定如何修复它
private void timer1_Tick(object sender, EventArgs e)
{
List<Obstacle> removed = new List<Obstacle>();
foreach (Obstacle o in obstacles_)
{
Rectangle bounds = o.Bounds;
if (players_[0].Bounds.IntersectsWith(bounds))
removed.Add(o);
}
foreach (Obstacle ob in removed)
obstacles_.Remove(ob);
}基本上,我需要它做的是,如果玩家遇到一个对象,那么它将从列表中删除自己,并停止在窗体上绘制。
编辑-意识到我并没有真正说出问题是什么,当物体发生碰撞时,它不会自行移除,而是继续绘制
编辑-2修复-请参阅下面的注释!
发布于 2015-02-14 12:13:58
我的第一个猜测是,您在绘制步骤中使用的对象列表与在碰撞步骤中使用的对象列表不同。例如,如果要从obstacles_中删除对象,但在绘制步骤中遍历objects_,则仍会绘制这些对象。
另一个问题可能是,如果每一步都重新构建obstacles_列表。我建议单步通过这个块,确保对象确实被删除了,然后检查绘制步骤,看看列表是否是最新的(对象已经消失)。如果可以,从一个障碍开始,让它对你自己来说更容易。
发布于 2015-02-14 12:33:46
好的,伙计们,感谢大家的帮助,我已经弄清楚了,我在代码一开始的时候在障碍类中创建了边界,但是当它更新它的位置时,边界没有更新……
看起来有点愚蠢,但我想我现在已经解决了。
感谢所有想要帮助我们的人!
https://stackoverflow.com/questions/28512248
复制相似问题