Okay, ich habe einige Artikel, Tutorials und Fragen dazu gelesen. Die meisten verweisen auf dieselbe Technik, die mein Problem nicht löst. Ich brauche die Fähigkeit, halbtransparente Sprites zu erstellen (wirklich texture2D) und sie über ein anderes Sprite legen zu lassen.
Ich kann das mit den gefundenen Codebeispielen etwas erreichen, bin aber mit den Ergebnissen nicht zufrieden und weiß, dass es einen Weg gibt, dies zu tun. In der mobilen Programmierung (BREW) haben wir es nach alter Schule gemacht und tatsächlich jedes Pixel vor dem Rendern auf Transparenz überprüft.
In diesem Fall scheint das darunterliegende Sprite mit dem darüberliegenden Alpha gemischt zu werden. Dies mag ein Artefakt sein, wie ich die Textur rendere, aber wie ich bereits sagte, verweisen alle Beispiele auf diese eine Technik. Bevor ich weiter gehe, werde ich meinen Beispielcode einfügen.
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();
}
Wie Sie sehen, verwende ich in diesem Code die überladene SpriteBatch.Begin-Methode, die unter anderem einen Mischungsstatus annimmt. Ich bin mir fast sicher, dass das mein Problem ist. Ich möchte die Sprites nicht mischen, sondern transparent machen, wenn Alpha gleich 0 ist. In diesem Beispiel kann Alpha auf 0 gesetzt werden, aber es werden trotzdem beide Kacheln angezeigt, wobei das Sprite in der unteren z-Reihenfolge aufgrund von verfärbt ist mischen. Dies ist kein gewünschter Effekt. Ich möchte, dass das Sprite mit höherer Z-Ordnung ausgeblendet wird und die darunter liegende Farbe nicht auf diese Weise beeinflusst wird.
Ich bin hier möglicherweise weit entfernt, da ich noch ziemlich neu in der XNA-Entwicklung bin. Sie können mich also jederzeit in die richtige Richtung lenken, falls ich das falsche Kaninchenloch betrete.
TIA