我有一个奇怪的问题,我相信我相对缺乏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循环,并在创建后手动将纹理的每个像素设置为一种颜色。这工作但它仍然显示像素我之前设置的颜色。这很奇怪。
请忽略此主题。我自己这样做的问题非常令人尴尬。我有一些代码可以缓存要更改的像素,是的......你猜对了,我没有清除它,而是在新的纹理实例上再次完成工作。
非常尴尬....
答案 0 :(得分:1)
如果没有太多详细信息,听起来您正在尝试使用之前所做的更改来加载Texture2D。由于您将其设置为null,因此当您重新加载Texture2D时,它将返回到原始状态。如果要再次使用它,则需要保存对像素所做的更改以供日后使用。希望这有帮助!
答案 1 :(得分: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();
答案 2 :(得分:1)
如何创建纹理?如果从资源加载它们(texture = Content.Load(“texture_name”)),你描述的问题听起来像是你逻辑中的一个错误:你的程序没有做你认为它正在做的事情。跟踪,调试......
如果你正在创建全新的纹理(纹理=新的Texture2D(...)),则可能(未经验证)新纹理未初始化并且正在从某种内存池中检索其内存空间,因此检索最近标记的处理纹理数据。例如,尝试初始化纹理数据,并将其设置为全黑,