作为我的要求的一部分,我需要在整个代码中使用堆栈而不是列表。我已经做了很多关于使用堆栈类的研究但是我发现很难在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);
}
}
}
有什么想法吗?
答案 0 :(得分:1)
你必须使用.push()和.pop()来实现堆栈 你可以在msdn找到更多关于堆栈的信息 http://msdn.microsoft.com/en-us/library/system.collections.stack.aspx
答案 1 :(得分: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 ...
}
}
我假设crystals
是Stack<Crystal>
另外作为旁注:crystals.Push(new Crystal());
会在堆栈顶部添加一个元素。
答案 2 :(得分:1)
我认为您的代码位于C# Stack not updating。你能去那里看看这个案子有什么答案吗?