如何正确使用XNA's SetData方法
本文关键字:SetData 方法 何正确 XNA | 更新日期: 2023-09-27 18:18:41
我尝试使用SetData方法作为我在游戏中使用的基于像素的碰撞检测机制的一部分。一般来说,我想将纹理的重叠像素设置为透明。
在尝试使用SetData时,我一直收到以下异常:当资源在GraphicsDevice上被积极设置时,你不能调用SetData。在调用SetData之前将其从设备中移除。"
我确实在StockOverFlow中找到了一些处理此异常的几乎类似的问题,但我仍然不确定如何处理此异常:
- 我尝试从Draw方法调用SetData,但异常不断出现。
- 我试图理解我是否应该以某种方式从GraphicsDevice中删除纹理,但唯一的方法似乎是在GraphicsDevice中使用纹理的索引。纹理[idx]并将其设置为null。如果我不在类中保存这个索引呢?
我的游戏,自然地,我认为,拥有多种纹理在它里面(其中一些是添加到游戏。组件也是如此)。也许这就是问题的根源?
我附加了一小部分我的代码…我看不出有什么理由要发更多的。
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);
...}
-
在像素的碰撞检测是不有效的,你必须冷颜色阵列,你必须关心的规模和旋转因素。
-
如果你正在使用renderTarget,你应该将renderTarget设置为null,这样你就可以改变像素,如果你不使用renderTarget,你应该在更新(这是更好的)中改变像素,如果你想在绘制方法中这样做,那么你应该在spriteBatch之前调用is。开始。