Ok, ho letto diversi articoli, tutorial e domande a riguardo. Molti indicano la stessa tecnica che non risolve il mio problema. Ho bisogno della capacità di creare sprite semitrasparenti (in realtà le texture2D) e farle sovrapporre a un altro sprite.
Posso ottenerlo in qualche modo con gli esempi di codice che ho trovato, ma non sono soddisfatto dei risultati e so che esiste un modo per farlo. Nella programmazione mobile (BREW) l'abbiamo fatto alla vecchia scuola e abbiamo effettivamente controllato la trasparenza di ogni pixel prima del rendering.
In questo caso sembra rendere lo sprite sotto di esso mescolato con l'alfa sopra di esso. Questo potrebbe essere un artefatto di come sto renderizzando la trama ma, come ho già detto, tutti gli esempi indicano questa tecnica. Prima di andare oltre, vado avanti e incolerò il mio codice di esempio.
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();
}
Come puoi vedere, in questo codice sto usando il metodo SpriteBatch.Begin sovraccarico che prende, tra le altre cose, uno stato di fusione. Sono quasi sicuro che sia un mio problema. Non voglio BLENDARE gli sprite, voglio che siano trasparenti quando l'alfa è 0. In questo esempio posso impostare l'alfa su 0 ma rende comunque entrambi i riquadri, con lo sprite ordinato z inferiore che appare attraverso, scolorito a causa del miscelazione. Questo non è l'effetto desiderato, voglio che lo sprite più alto in ordine z sbiadisca e non abbia l'effetto del colore sottostante in tale maniera.
Potrei essere molto lontano da qui dato che sono abbastanza nuovo nello sviluppo di XNA, quindi sentiti libero di guidarmi nella direzione corretta nel caso in cui vado nella tana del coniglio sbagliata.
TIA