C# 循环的XNA列表

C# 循环的XNA列表,c#,arrays,for-loop,xna,C#,Arrays,For Loop,Xna,我无法运行在屏幕上绘制不同图像的循环。这是我在游戏类中创建的列表: RepMeter = new List<>(); RepMeter.Add(RepOne); RepMeter.Add(RepTwo); RepMeter.Add(RepThree); RepMeter.Add(RepFour); RepMeter.Add(RepFive); RepMeter.Add(RepSix); RepMeter.Add(RepSeven); RepMeter.Add(RepEight);

我无法运行在屏幕上绘制不同图像的循环。这是我在游戏类中创建的列表:

RepMeter = new List<>();

RepMeter.Add(RepOne);
RepMeter.Add(RepTwo);
RepMeter.Add(RepThree);
RepMeter.Add(RepFour);
RepMeter.Add(RepFive);
RepMeter.Add(RepSix);
RepMeter.Add(RepSeven);
RepMeter.Add(RepEight);
RepMeter .Add(RepNine);
RepMeter.Add(RepTen);
RepMeter.Add(RepEleven);
RepMeter.Add(RepTwelve);
RepMeter.Add(RepThirteen);
RepMeter.Add(RepFourteen);
RepMeter.Add(RepFifteen);
RepMeter.Add(RepSixteen);
RepMeter.Add(RepSeventeen);
RepMeter.Add(RepEighteen);
RepMeter.Add(RepNineteen);
RepMeter.Add(RepTwenty);

有人能告诉我为什么我的RepMeter不会更改为列表中的下一个RepMeter图片吗?

这是一个猜测,因为您的代码有点奇怪,甚至无法编译。 不管怎样,也许你想做的是这样的:

    //this variable store the current texture index that will be displayed
    private int currentRep = 0;
    public void Update(GameTime gameTime)
    {
        if (activeCharacter.DestY >= 600)
        {
            currentRep++;
            //this line makes sure the current number doesn't point to an index higher than the number of items stored inside your list
            currentRep %= RepMeter.Count;
        }
    }

    public void Draw(GameTime gameTime)
    {
        spriteBatch.Begin();
        spriteBatch.Draw(RepMeter[currentRep], new Vector2(690, 29), Color.White);
        spriteBatch.End();
    }
这应该有效(未经测试),显然您需要确保RepMeter是一个列表,并且您在其中插入的内容实际上是Texture2D

不管怎样,如果这是您的实际代码,我建议您从更简单的代码开始

注释和说明:

  • 通常,您需要在update方法中登录并在draw方法中绘制要更新的内容
  • 你必须开始和结束spritebatch才能画画

  • 请重新格式化你的代码..代码没有任何意义,所以。。。即使你忽略了格式!请参阅:
    for(int RepMeter=0;Rep<20;i++){RepMeter[i];}
    What?!您的更新代码没有更新任何内容。应该有类似于
    RepMeter[i]=xy的东西
    RepMeter[i].Something=xy。我重新格式化了您的代码。把这些变化放在心上,并在将来遵循类似的格式,不仅是帖子,还有你的私人代码——相信我,这会有很大帮助。此外,我还修复了代码中一些清晰的语法错误(因为我假设它可以编译,另外,请将代码复制到问题中,不要重写它,然后构造一个)-如果这不是您的代码的实际外观,请随意修改。@Dukeling感谢您的建议!唯一的问题是RepMeter现在说它在当前上下文中不存在。你知道为什么吗?我认为这是正确的。唯一的问题是RepMeter现在说它在当前上下文中不存在。你知道为什么吗?@brade你在哪里?这意味着通过Draw方法无法看到RepMeter。如果RepMeter未在类主体内声明为变量,则会发生这种情况。所有内容都在一个类中。真的很抱歉,但我不太清楚你的意思,因为我已经编程3天了。如何声明RepMeter?我需要使用其他运算符,因为“%”正在跳过一些图像。你知道我能做些什么来防止这种情况吗?有20种纹理,它跳过了其中的一些。@brade它不可能是%=错误的。%是模操作数,它只返回除法的余数。如果您看到跳过它,则只意味着您将多次添加到currentRep。如果您添加的唯一位置是Update,那么考虑将断点放置在UPDATE方法和内部提请中。如果每次绘制更新断点触发两次或两次以上,则说明您做错了。
    
    if (RepMeter.RepOne)
    {
         spriteBatch.Draw(RepOne, new Vector2(690, 29), Color.White);
    }
    else if (RepMeter.Two)
    {
         spriteBatch.Draw(RepTwo, new Vector2(690,29), Color.White);
    }
    else if (RepMeter.RepThree)
    {
         spriteBatch.Draw(RepThree, new Vector2(690,29),Color.White);
    }
    
        //this variable store the current texture index that will be displayed
        private int currentRep = 0;
        public void Update(GameTime gameTime)
        {
            if (activeCharacter.DestY >= 600)
            {
                currentRep++;
                //this line makes sure the current number doesn't point to an index higher than the number of items stored inside your list
                currentRep %= RepMeter.Count;
            }
        }
    
        public void Draw(GameTime gameTime)
        {
            spriteBatch.Begin();
            spriteBatch.Draw(RepMeter[currentRep], new Vector2(690, 29), Color.White);
            spriteBatch.End();
        }