Я пытаюсь использовать метод SetData как часть пиксельного механизма обнаружения столкновений, который я использую в своей игре.
В общем, я хочу установить прозрачные перекрывающиеся пиксели текстуры.
При попытке использовать SetData я получаю следующее исключение:
«Вы не можете вызывать SetData для ресурса, когда он активно установлен на GraphicsDevice. Удалите его из устройства перед вызовом SetData.»
Мне удалось найти некоторые почти похожие вопросы, касающиеся этого исключения, в StockOverFlow, но я все еще не уверен, как справиться с этим исключением:
- Я пытался вызвать SetData из метода Draw, но исключение продолжает появляться.
- Я пытался понять, должен ли я каким-то образом удалить текстуру из GraphicsDevice, но единственный способ сделать это, по-видимому, - использовать индекс текстуры в GraphicsDevice.Textures [idx] и установить его в null. Что если я не держу этот индекс в своем классе?
Моя игра, естественно, содержит в себе несколько текстур (некоторые из них добавлены и в Game.Components). Возможно, это может быть причиной проблемы?
Я прилагаю очень небольшую часть своего кода ... Я не вижу реальной причины размещать больше, чем это.
private void collisionDetected()
{...
for (int col = collisionLeftCordinate; col < collisionRightCordinate; col++)
{
for (int row = collisionTopCordinate; row < collisionBottomCordinate - 1; row++)
{
if (m_BarrierPixels[col + row * (int)this.Texture.Width] != Color.Transparent)
{
m_BarrierPixels[col + row * (int)this.Texture.Width] = Color.Transparent;
m_TransparentPixelsCounter++;
}
}
}
this.Texture.SetData(m_BarrierPixels);
...}