【发布时间】:2011-12-24 15:08:37
【问题描述】:
我尝试将 SetData 方法用作我在游戏中使用的基于像素的碰撞检测机制的一部分。 一般来说,我想将纹理的重叠像素设置为透明。
在尝试使用 SetData 时,我不断收到以下异常: “在 GraphicsDevice 上主动设置资源时,您不能在资源上调用 SetData。在调用 SetData 之前从设备取消设置它。”
我确实设法在 StockOverFlow 中找到了一些几乎类似的问题来处理这个异常,但我仍然不确定如何处理这个异常:
- 我尝试从 Draw 方法调用 SetData,但仍然出现异常。
- 我试图了解是否应该以某种方式从 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);
...}
【问题讨论】:
标签: c# exception graphics xna collision-detection