我正在做一个涉及2个图片框列表和碰撞检测的小游戏。 我所拥有的是:
List<PictureBox> spells = new List<PictureBox>();
List<PictureBox> enemy = new List<PictureBox>();
然后,我使用函数为每个列表动态创建新的图片框及其相应的图像。
然后使用计时器进行碰撞检测:
private void timer1_Tick(object sender, EventArgs e)
{for (int i = 0; i <= spells.Count-1 ; i++)
{
for (int j = 0; j <= enemy.Count-1 ; j++)
{
if (spells[i].Top == enemy[j].Top &&
spells[i].Right > enemy[j].Left &&
spells[i].Tag.ToString()=="Fire" && enemy[j].Tag.ToString()=="Frostenemy")
{
Controls.Remove(enemy[j]);
enemy[j].Dispose();
enemy.Remove(enemy[j]);
Controls.Remove(spells[i]);
spells[i].Dispose();
spells.Remove(spells[i]);
}
重复其他类型的picutrebox。如果“敌人”列表中少于3个图片框由另一个计时器生成,则此工作正常,但是一旦屏幕上有超过3个,我尝试从“法术”列表中创建一个图片框,我收到以下错误:
“索引超出范围。必须是非负数且小于集合的大小。”
我已经找到了解决这个问题的其他方法,但到目前为止我还没有真正的运气。
答案 0 :(得分:0)
作为一项实验,尝试让您的计时器更长(更慢,每分钟更少的刻度),看看问题是否有所改善,但是不会消失。
计时器可能会启动同时运行您的功能 - 这可能会导致各种逻辑问题。