【问题标题】:XNA List For loopXNA List For 循环
【发布时间】:2014-01-19 15:25:32
【问题描述】:

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

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

我的更新代码:

if (activeCharacter.DestY >= 600)
{
     for (int RepMeter = 0; Rep < 20; i++)
         RepMeter[i];
}

这是我的抽奖代码:

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

谁能告诉我为什么我的 RepMeter 不会更改为列表中的下一张 RepMeter 图片?

【问题讨论】:

  • 请重新格式化您的代码..
  • 代码没有任何意义……即使你忽略了格式!见:for (int RepMeter = 0; Rep &lt; 20; i++){ RepMeter[i]; } 什么?!
  • 您的更新代码没有更新任何内容。应该有RepMeter[i] = xy;RepMeter[i].Something = xy; 之类的东西。
  • 我重新格式化了你的代码。牢记更改并在未来遵循类似的格式,不仅是 Stack Overflow 帖子,还有你的私人代码 - 相信我,它会有很大帮助。另外,我在您的代码中修复了一些明显的语法错误(因为我假设它可以编译,另外,请将代码复制到问题中,不要重写它,并构造一个Minimal, Complete, Tested and Readable example) - 如果有,请随时修改它这实际上不是您的代码的样子。
  • @Dukeling 谢谢你的建议!唯一的问题是 RepMeter 现在说它在当前上下文中不存在。你知道这是为什么吗?

标签: c# arrays for-loop xna


【解决方案1】:

这是一个猜测,因为您的代码有点奇怪,甚至无法编译。 无论如何,您想要做的可能是这样的:

    //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 是一个 List 并且您插入其中的内容实际上是 Texture2D...

无论如何,如果这是你的实际代码,我建议你从更简单的开始。

注释和解释:

  1. 一般来说你要更新什么你在update方法里登录,在draw方法里面画图。
  2. 您必须开始和结束您的 spritebatch 才能进行绘制。

【讨论】:

  • 我认为这是正确的。唯一的问题是 RepMeter 现在说它在当前上下文中不存在。你知道这是为什么吗?
  • @brade 你在哪里声明了 RepMeter?这意味着 RepMeter 在 Draw 方法中不可见。如果 RepMeter 未在类主体内声明为变量,则会发生这种情况。
  • 一切都在一个类中。真的很抱歉,但我不太清楚你的意思,因为我已经编程了 3 天。如何申报 RepMeter?
  • 我需要使用不同的运算符,因为 '%' 正在跳过一些图像。知道我能做些什么来防止这种情况吗?有 20 种纹理,它会跳过其中的一些。
  • @brade 不可能是 %= 错误。 % 是模操作数,它只返回除法的余数。如果您看到跳过它只能表示您不止一次添加到 currentRep。如果您添加的唯一位置是 Update,则考虑在 update 方法中放置一个断点,在 Draw 中放置一个断点。如果每次绘制更新​​断点触发两次或更多次,则说明您做错了。
猜你喜欢
  • 2010-12-21
  • 2016-08-04
  • 2016-12-28
  • 1970-01-01
  • 2017-03-19
  • 2011-10-29
  • 2021-01-21
  • 1970-01-01
  • 2017-07-14
相关资源
最近更新 更多