好的,我已经阅读了几篇文章,教程以及与此有关的问题。大多数人都指向不能解决我的问题的相同技术。我需要能够创建半透明的精灵(确实是texture2D)并使其覆盖另一个精灵。
我可以通过找到的代码示例来实现这一点,但是我对结果不满意,而且我知道有办法做到这一点。在移动编程(BREW)中,我们采用老式方法,并在渲染之前实际检查了每个像素的透明度。
在这种情况下,似乎将其下方的精灵与其上方的alpha混合在一起。这可能是我如何渲染纹理的产物,但是,正如我之前说的,所有示例都指向这一技术。在继续之前,我将继续粘贴示例代码。
public void Draw(SpriteBatch batch, Camera camera, float alpha)
{
int tileMapWidth = Width;
int tileMapHeight = Height;
batch.Begin(SpriteSortMode.Texture,
BlendState.AlphaBlend,
SamplerState.PointWrap,
DepthStencilState.Default,
RasterizerState.CullNone,
null, camera.TransformMatrix);
for (int x = 0; x < tileMapWidth; x++)
{
for (int y = 0; y < tileMapHeight; y++)
{
int tileIndex = _map[y, x];
if (tileIndex != -1)
{
Texture2D texture = _tileTextures[tileIndex];
batch.Draw(
texture,
new Rectangle(
(x * Engine.TileWidth),
(y * Engine.TileHeight),
Engine.TileWidth,
Engine.TileHeight),
new Color(new Vector4(1f, 1f, 1f, alpha )));
}
}
}
batch.End();
}
如您所见,在这段代码中,我使用了重载的SpriteBatch.Begin方法,该方法除其他外还具有混合状态。我几乎肯定这是我的问题。我不想混合精灵,我希望它们在alpha为0时是透明的。在此示例中,我可以将alpha设置为0,但它仍会渲染两个图块,其中较低的z排序的精灵会显示通过,由于混合。这不是理想的效果,我希望更高的Z阶精灵逐渐淡出,而不以这种方式影响其下方的颜色。
我可能还不太熟悉,因为我对XNA开发还很陌生,因此如果我走错了兔子洞,可以随时引导我朝正确的方向发展。
TIA