C#游戏《飞机大战》错误总结之timer中的循环调用

来源:互联网 发布:eu域名 编辑:程序博客网 时间:2024/06/05 15:49



         问题描述:设置一个timer,在timer中调用碰撞检测方法,方法里面有一个循环,检测。但由于没有加break,导致出现bug。编辑器错误描述是:

      访问集合时索引越界。


           

 public void PZJC()        {           // #region 判断玩家的子弹是否打到了敌人            for(int i=0;i<listHeroZiDan.Count;i++)            {                for (int j = 0; j < listPlaneEnemy.Count; j++)                {                    if (listHeroZiDan[i].GetRectangle().IntersectsWith(listPlaneEnemy[j].GetRectangle()))                    {                        //SingleObject.GetSingle().RemoveGameObject(listPlaneEnemy[j]);                        //SingleObject.GetSingle().RemoveGameObject(listHeroZiDan[i]);                                                listHeroZiDan.Remove(listHeroZiDan[i]);                        listPlaneEnemy.Remove(listPlaneEnemy[j]);                        break;//注意加break,退出循环,不加会导致前两个可以正常销毁,但后面的就不行了                        //在timer中,都会调用                    }                }}}
  private void timerBG_Tick(object sender, EventArgs e)        {             //每50毫秒就重绘制            this.Invalidate();            int PlaneNum = SingleObject.GetSingle().listPlaneEnemy.Count;            if (PlaneNum < 3)                InitialPlaneEnemy();            SingleObject.GetSingle().PZJC();        }

                            原因尚待探寻

0 0