-1

我有一个奇怪的问题,我认为我对 XNA 框架的知识相对缺乏,这使我无法修复。

基本上,我有一个 Texture2D 引用,它设置为 Texture2D 的一个新实例。在运行期间,它的一些像素被设置,这一切都很好地工作,因为它在游戏循环中绘制。

奇怪的是,如果我将引用设置为 null,(它只会在不为 null 的情况下绘制)它不会按预期绘制。

稍后,我将引用设置为新的 Texture2D 并开始将其绘制到屏幕上。问题是它保存了原始 Texture2D 对象的所有数据。

编辑

对不起,我之前没有说清楚。

我所拥有的是这样的......

private Texture2D WorkingTexture {get; set; }

private void Update()
{
 if(some input)
 {
  this.WorkingTexture = null;
 }

 if(some other input)
 {
  this.WorkingTexture = new Texture2D(this.GraphicsDevice, 500, 500, true, SurfaceFormat.Color);

  this.WorkingTexture.SetData<Color>(0, new Rectangle((int)vector2.X, (int)vector2.Y, 4, 4), colors, 0, 16);

  }
}

private void Draw()
{
 if (this.WorkingTexture != null)
 {
    spritebatch.draw(this.WorkingTexture,.....);
 } 
}

第二次编辑

我还设置了一个 for 循环,并在创建纹理后手动将纹理的每个像素设置为一种颜色。这可行,但它仍将像素显示为我之前设置的颜色。这很奇怪。


请忽略此线程。这个问题非常尴尬是我自己做的。我有一些代码可以缓冲要更改的像素,是的……您猜对了,我没有清除它,它正在新的纹理实例上重新进行工作。

好尴尬……

4

3 回答 3

1

你如何创建纹理?如果您从资源 (texture = Content.Load("texture_name")) 加载它们,那么您描述的问题听起来像是逻辑中的错误:您的程序没有按照您认为的那样做。跟踪、调试...

如果您正在创建全新的纹理 (texture = new Texture2D(...)),则可能(未验证)新纹理未初始化并且正在从某种内存池中检索其内存空间,因此检索最近的标记为处理纹理数据。例如,在创建纹理数据时尝试将其初始化为全黑。

于 2011-07-27T16:10:10.023 回答
1

没有太多细节可以继续,听起来您正在尝试使用您之前所做的更改加载 Texture2D。由于您将其设置为 null,因此当您重新加载 Texture2D 时,它将恢复为原始状态。如果您想再次使用它,您需要保存对像素所做的更改以供以后使用。希望这可以帮助!

于 2011-07-27T15:14:00.803 回答
1

所以你已经设置了这样的纹理

Texture2D texture = Content.Load<Texture2D>("texture_name");

然后你像这样应用一个新的参考

texture = Content.Load<Texture2D>("other_texture_name");

正确的?

这不是它应该的样子。您必须设置 GraphicsDevice 以使用特定的纹理。使用 BasicEffect 类,这将是这样的:

BasicEffect effect = new BasicEffect(GraphicsDevice);
effect.Texture = texture;
effect.CurrentTechnique.Passes[0].Apply();
于 2011-07-27T15:25:57.767 回答