好的,我已经阅读了几篇文章,教程以及与此有关的问题。大多数人都指向不能解决我的问题的相同技术。我需要能够创建半透明的精灵(确实是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