XNA new Texture2D сохраняет старые данные - PullRequest
0 голосов
/ 27 июля 2011

У меня странная проблема, которая, как мне кажется, из-за моего относительного недостатка знаний о платформе XNA я не могу исправить.

По сути, у меня есть ссылка на Texture2D, настроенная на новый экземпляр Texture2D.Во время выполнения некоторые его пиксели устанавливаются, и все это прекрасно работает, как показано в gameloop.

Странно, если я устанавливаю ссылку на ноль (она будет рисовать, только если не ноль), это какОжидаемый не рисует.

Позже я установил ссылку на новый 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 и вручную установил каждый пиксель текстуры в цвет после его создания.,это работает, но все равно показывает пиксели в качестве цветов, которые я установил ранее.Это очень странно.


Пожалуйста, не обращайте внимания на эту тему.Проблема была очень смущающей из-за моих собственных действий.У меня был какой-то код, который буферизовал пиксели для изменения, и да ... вы догадались, я не очищал его, и он снова и снова делал работу над новым экземпляром текстуры.

очень смущенно ....

Ответы [ 3 ]

1 голос
/ 27 июля 2011

Итак, вы настроили текстуру, подобную этой

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();
1 голос
/ 27 июля 2011

Как вы создаете текстуры?Если вы загружаете их из ресурса (texture = Content.Load ("texture_name")), то проблема, которую вы описываете, звучит как ошибка в вашей логике: ваша программа не делает то, что вы думаете, она делает.Трассировка, отладка ...

Если вы создаете совершенно новые текстуры (texture = new Texture2D (...)), возможно (не проверено), что новая текстура не инициализирована и ее пространство памяти используетсяизвлекается из некоторого пула памяти, поэтому извлекается недавно помеченный для удаления данных текстуры.Попробуйте инициализировать данные текстуры, как только вы их создадите, установив, например, полностью черный.

1 голос
/ 27 июля 2011

Не вдаваясь в подробности, похоже, что вы пытаетесь загрузить Texture2D с изменениями, которые вы сделали ранее.Так как вы устанавливаете его на ноль, при перезагрузке Texture2D он вернется к оригиналу.Вам нужно будет сохранить внесенные изменения в пикселях для последующего использования, если вы захотите использовать его снова.Надеюсь, это поможет!

...