D'accord, j'ai lu plusieurs articles, tutoriels et questions à ce sujet. La plupart indiquent la même technique qui ne résout pas mon problème. J'ai besoin de pouvoir créer des sprites semi-transparents (vraiment des texture2D) et les faire superposer à un autre sprite.
Je peux y arriver quelque peu avec les exemples de code que j'ai trouvés mais je ne suis pas satisfait des résultats et je sais qu'il existe un moyen de le faire. En programmation mobile (BREW), nous l'avons fait à l'ancienne et avons vérifié la transparence de chaque pixel avant le rendu.
Dans ce cas, il semble que le sprite en dessous se mélange avec l'alpha au-dessus. Cela peut être un artefact de la façon dont je rend la texture mais, comme je l'ai déjà dit, tous les exemples pointent vers cette technique. Avant d'aller plus loin, je vais continuer et coller mon exemple de code.
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();
}
Comme vous pouvez le voir, dans ce code, j'utilise la méthode SpriteBatch.Begin surchargée qui prend, entre autres, un état de fusion. Je suis presque certain que c'est mon problème. Je ne veux pas MÉLANGER les sprites, je veux qu'ils soient transparents lorsque alpha est 0. Dans cet exemple, je peux mettre alpha à 0 mais cela rend toujours les deux tuiles, avec le sprite ordonné en z inférieur, décoloré à cause de la mélange. Ce n'est pas un effet souhaité, je veux que le sprite d'ordre z supérieur disparaisse et n'affecte pas la couleur en dessous de cette manière.
Je suis peut-être loin d'ici car je suis relativement nouveau dans le développement XNA, alors n'hésitez pas à me diriger dans la bonne direction au cas où je descendrais dans le mauvais terrier de lapin.
TIA