【问题标题】:XNA: Storing lots of Texture2D in an arrayXNA:在数组中存储大量 Texture2D
【发布时间】:2013-09-28 08:19:23
【问题描述】:

我是从 xna 开始的,我是新手,但我正在努力继续使用这个框架,无论如何,我的问题是: 我有很多 .png 图像并且不想为这些图像中的任何一个创建对象,所以我想将它们放在 Texture2D 数组中,我认为这是这样做的方法,但看起来它不正确方式:

Texture2D[] _rCards, _bCards, _sCards;
_bCards = new Texture2D[9]; 
_rCards = new Texture2D[9];
_sCards = new Texture2D[6];

for (int i = 1; i < 10; i++)
{
    _bCards[i] = Content.Load<Texture2D>("Images/Common/Black/"+i);
    _rCards[i] = Content.Load<Texture2D>("Images/Common/Red/"+i);
    if(i<6)
        _sCards[i] = Content.Load<Texture2D>("Images/Special/Card" + (i-1));
}

纹理的文件名是 1.png、2.png、3.png 等。

特殊卡片有card1.png、card2.png、card3.png等。

我正在尝试制作二十一点游戏。

您能否给我一个建议,将所有这些纹理加载到一个纹理 2D 数组中。

IDE 给出了 NULLREFERENCEEXCEPTION 问题或其他问题。

也许语言不理解整个地址以将纹理作为字符串查找。

【问题讨论】:

  • NullReferenceException 是在哪里抛出的?什么对象是空的?由于您正在尝试加载 PNG,您是否尝试将 +".png" 添加到您的字符串中?
  • 不确定这是否是复制粘贴,但在 C# 中,数组索引从 0 开始并转到 Length-1。当 i == 9 时,您索引到 _bCards 和 _rCards 将遇到 Out 或 Range 异常。

标签: c# xna texture2d


【解决方案1】:

索引从 0 开始...

for (int i = 1; i < 10; i++)
{
  _bCards[i-1] = Content.Load("Images/Common/Black/"+i);
  _rCards[i-1] = Content.Load("Images/Common/Red/"+i);
   if(i<6) _sCards[i-1] = Content.Load("Images/Special/Card" + (i-1));
}

如果你想同时加载所有纹理,你可以使用精灵表示例:

http://create.msdn.com/en-US/education/catalog/sample/sprite_sheet

您将拥有一个独特的资源和一个源矩形字典来绘制精灵...

【讨论】:

  • 但是我会更改 for 循环中的索引,并在纹理名称中简单地写 +(i+1)
  • 我也是,但是我比较懒,这种方式只需要三处改动,;P ...说真的,是最接近原始代码的方式....
猜你喜欢
  • 2012-12-21
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
相关资源
最近更新 更多