2

作为我要求的一部分,我需要在整个代码中使用堆栈而不是列表。我已经对使用堆栈类进行了大量研究,但是我发现很难在 C# XNA 中找到任何示例。

在调整了我的代码之后,我设法使其大部分兼容,但是我正在努力使以下代码与堆栈兼容:

    private void UpdateCrystals(GameTime gameTime)
    {
        for (int i = 0; i < gems.Count; ++i)
        {
            Crystal crystal = crystals[i];

            crystal.Update(gameTime);

            if (crystal.BoundingCircle.Intersects(Player.BoundingRectangle))
            {
                crystals.RemoveAt(i--);
                OnGemCollected(crystal, Player);
            }
        }
    }

有任何想法吗?

4

3 回答 3

1

我认为您在C# Stack 上的代码没有更新. 你能去那里看看这个案子的答案是什么吗?

于 2013-05-18T07:02:10.437 回答
1

那么它会是这样的:

// note the i++ instead of ++i ...
for (int i = 0; i < gems.Count; i++)
{
   // gives you the element on top of the stack
   Crystal crystal = crystals.Peek();

   // do other stuff here

   if (crystal.BoundingCircle.Equals(Player.BoundingRectangle))
   {
       // removes the element on top of the stack (the last one entered)
       crystals.Pop();

       // do even more stuff here ...
   }
}

在这里我假设crystalsStack<Crystal>

另外作为旁注:crystals.Push(new Crystal());将在堆栈顶部添加一个元素。

于 2013-05-18T04:48:39.097 回答
1

您必须对堆栈使用 .push() 和 .pop() 您可以在 msdn 上找到有关堆栈的更多信息 http://msdn.microsoft.com/en-us/library/system.collections.stack.aspx

于 2013-05-18T04:40:53.977 回答