【问题标题】:Doesn't Content.Load<Texture2D>() create a new instance?Content.Load<Texture2D>() 不会创建一个新实例吗?
【发布时间】:2013-09-09 07:57:38
【问题描述】:

我有这个结构:

public struct LevelElements
{
    public Texture2D levelTexture;
    // other variables...
}

我用这种方式初始化它:

for (int i = 0; i < 2; i++)
    levelElements[i] = new LevelElements
    {
        levelTexture = content.Load<Texture2D>("Terrain/level"),
        // other variables...
    }

然后我在用textureLevel.SetData 方法修改它的同时绘制第一个纹理。
问题是,如果我绘制第二个,它看起来与修改后的第一个相同,而不是从内容加载的原始那个。
为什么levelTextures 有相同的引用? Content.Load&lt;Texture2D&gt;() 不会新建实例吗?

PS:我不需要创建该纹理的副本,我只是在测试我的代码并发现了这种行为。

【问题讨论】:

标签: c# reference xna xna-4.0


【解决方案1】:

我以前没有使用过它,但在我看来,您可能希望像这样声明它以便将其用作实例变量:

Texture2D texture = new Texture2D( resourceDevice, image.PixelWidth, image.PixelHeight, false, SurfaceFormat.Color);

read on: 来自 msdn

【讨论】:

  • 不错的方法,但 BitmapSourceExtensions.CopyTo 似乎只存在于 Silverlight 中。无论如何,您的解决方案是正确的,“强制”创建一个现在可以工作的新实例!
  • 是的,我并不是建议你使用那个确切的方法,只是你需要实例化一个 Texture2D 的“新”实例而不是使用静态声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 2020-09-05
  • 2013-10-20
相关资源
最近更新 更多