【问题标题】:record collection detection and output amount of collisions记录集合检测和碰撞输出量
【发布时间】:2014-02-28 18:56:15
【问题描述】:

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

碰撞代码

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--;
            }

        }

【问题讨论】:

  • 在循环之前 int count = 0; 并代替您的评论 count++;?
  • 感谢您的建议

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


【解决方案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&lt;Apple&gt;,那么您可以删除一个苹果

myapples.RemoveAt(indx);

如果myapples 是一个数组,则将其替换为一个列表。仅当长度不变时才应使用数组。列表是可以增长和缩小的动态“数组”。

【讨论】:

    猜你喜欢
    • 2022-09-07
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多