记录集合检测和输出碰撞量

时间:2014-02-28 18:56:15

标签: c# silverlight if-statement for-loop collision-detection

我将如何进行并记录发生的碰撞数量?我有一个简单的碰撞检测,它将检测一个物体是否与另一个碰撞,我现在希望记录它们的碰撞。

碰撞代码

public void CompositionTarget_Rendering(object sender, EventArgs e)
    {
        appleTimer += 1;
        if (appleTimer > 60)
        {
            appleTimer = 0;
            AddApple(new Apple());
        }

        for (int indx = 0; indx < myapples.Count; indx++)
        {
            myapples[indx].Update(LayoutRoot);

            bool collided = DetectCollision(myapples[indx], myPig);
            if (collided)
            {
                // record how many apples are eaten here
                RemoveApple(myapples[indx]);
                indx--;
            }

        }

1 个答案:

答案 0 :(得分:1)

如果你在循环遍历列表时必须从列表中删除对象,则更容易向后循环,以免弄乱索引:

    int eatenAppleCount = 0;
    for (int indx = myapples.Count - 1; indx >= 0; indx--) {
        myapples[indx].Update(LayoutRoot);
        bool collided = DetectCollision(myapples[indx], myPig);
        if (collided) {
            eatenAppleCount++;
            RemoveApple(myapples[indx]);
        }
    }

注意:如果myapplesList<Apple>,那么您可以使用

删除苹果
myapples.RemoveAt(indx);

如果myapples是数组,请将其替换为列表。只有在长度不变的情况下才应使用数组。列表是可以增长和缩小的动态“数组”。