我尝试将SetData方法用作我在游戏中使用的基于像素的碰撞检测机制的一部分。 一般来说,我想将纹理的重叠像素设置为透明。
尝试使用SetData时,我一直收到以下异常: “当你在GraphicsDevice上主动设置资源时,你可能不会在资源上调用SetData。在调用SetData之前从设备中取消它。”
我确实找到了一些在StockOverFlow中处理此异常的几乎相似的问题,但我仍然不确定如何处理此异常:
我认为,我的游戏中包含多个纹理(其中一些也添加到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);
...}
答案 0 :(得分:0)
Pixel的碰撞检测效率不高,你需要冷色阵,你必须关注比例和旋转因素。
如果您正在处理renderTarget,则应将renderTarget设置为null,以便可以更改像素,如果您不使用renderTarget,则应更改Update中的像素(如果您想更改)在Draw方法中执行,然后应该在spriteBatch.Begin之前调用。