抽绳拒绝留在屏幕上(XNA)

时间:2012-07-15 16:23:16

标签: xna foreach drawstring

现在已经和这个问题进行了3个小时的斗争,我觉得现在是时候问一些专业人士了。

我的问题是我想制作一个滚动条,我想通过使用两个整数然后给列表中的每个项目ID,然后说出所有项目将显示两个整数之间的ID,然后生成2个按钮,它们将+或 - 整数,以便您可以“滚动”项目。

所以要意识到这一点,我决定制作虚拟代码,看看我如何能够解决这个问题。 在大多数情况下它的工作,但我现在有问题,似乎我的绘图功能不断刷新屏幕(即使我已经放入一个bool以确保它woulden),并通过这样做它保持擦除我在屏幕上列出的数字。

下面是代码:

List<int> test = new List<int>() {1,2,3,4,5,6,7 };

        int low = 0;
        int high = 3;
        int count;
        bool isDone = false;

 public override void Draw(GameTime gameTime)
        {
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null, null);

if (!isDone)
            {
                int posX = 20;
                foreach (int nr in test)
                {

                    if (count == high)
                    {
                        isDone = true;
                        break;

                    }
                    else
                    {
                        count++;
                    }
                    if (count >= low && count <= high)
                    {
                        posX += 20;
                        spriteBatch.DrawString(gameFont, nr.ToString(), new Vector2(posX, 20), Color.White);
                    }
                }
            }

 spriteBatch.End();

}

希望你们中的一些聪明的人能够注意到我错过的错误。

提前致谢

〜Etarnalazure。

1 个答案:

答案 0 :(得分:2)

你永远不会重置你的柜台。因此,数字仅在第一帧中可见。添加

count = 0;
在for循环之前

此外,您可能想要修改您的结构。如果您使用列表&lt;&gt;,则每个项目都已包含其索引。如果使用for循环,则不必遍历每个项目:

for(int i = low; i <= high; ++i)
{
    var currentItem = list[i];
}