Tamam, bununla ilgili birkaç makale, öğretici ve soru okudum. Çoğu sorunumu çözmeyen aynı tekniğe işaret ediyor. Yarı saydam spritelar (texture2D's gerçekten) oluşturma ve onlara başka bir sprite yerleştirme yeteneğine ihtiyacım var.
Bulduğum kod örnekleri ile biraz başarabilirim ama sonuçlardan memnun değilim ve bunu yapmanın bir yolu olduğunu biliyorum. Mobil programlamada (BREW) eski okulu yaptık ve renderlemeden önce her pikseli şeffaflık açısından kontrol ettik.
Bu durumda altındaki sprite'ı üstündeki alfa ile karıştırılmış gibi görünüyor. Bu, dokuyu nasıl oluşturduğumun bir ürünü olabilir, ancak daha önce söylediğim gibi, tüm örnekler bu tekniğe işaret ediyor. Daha ileri gitmeden önce örnek kodumu yapıştıracağım.
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();
}
Gördüğünüz gibi, bu kodda, diğer şeylerin yanı sıra, bir karışım durumunu alan aşırı yüklenmiş SpriteBatch.Begin yöntemini kullanıyorum. Bu benim sorunum neredeyse pozitif. Spriteları karıştırmak istemiyorum, alfa 0 olduğunda saydam olmalarını istiyorum. Bu örnekte alfa'yı 0 olarak ayarlayabilirim, ancak yine de her iki döşemeyi de oluşturur, çünkü alt z sıralı sprite, harmanlama. Bu istenen bir etki değil, daha yüksek z-emri hareketli grafiğin solmasını ve altındaki rengi bu şekilde etkilememesini istiyorum.
XNA gelişimi için oldukça yeni olduğum için burada olabilirim, bu yüzden yanlış tavşan deliğine inmem durumunda beni doğru yönde yönlendirmekten çekinmeyin.
TIA