【发布时间】:2011-12-03 23:55:34
【问题描述】:
我要检查选中的矩形是否透明:
spriteBatch.Draw(texture, new Vector2(0, 0),
new Rectangle(0, 0, 16, 16), Color.White);
有可能吗?
【问题讨论】:
-
不知道为什么这票数接近...
我要检查选中的矩形是否透明:
spriteBatch.Draw(texture, new Vector2(0, 0),
new Rectangle(0, 0, 16, 16), Color.White);
有可能吗?
【问题讨论】:
是的,这是可能的。您必须检查该区域中的所有像素都是透明的。请注意,这是一个相当缓慢的操作。
这是一个应该做你想做的方法:
bool IsRegionTransparent(Texture2D texture, Rectangle r)
{
int size = r.Width * r.Height;
Color[] buffer = new Color[size];
texture.GetData(0, r, buffer, 0, size);
return buffer.All(c => c == Color.Transparent);
}
请注意,我没有编译、测试或优化上述内容。此外,它专为预乘纹理(XNA 4.0 中的默认设置)而设计。
【讨论】:
GetData的正确语法是:texture.GetData(0, r, buffer, 0, size);