さて、これに関するいくつかの記事、チュートリアル、質問を読みました。ほとんどは、私の問題を解決しない同じテクニックを指します。半透明のスプライト(texture2Dの本当に)を作成し、それらを別のスプライトにオーバーレイする機能が必要です。
私が見つけたコードサンプルでそれをいくらか達成することはできますが、結果に満足しておらず、これを行う方法があることを知っています。モバイルプログラミング(BREW)では、私たちは古いやり方で、レンダリングの前に各ピクセルの透明度を実際にチェックしました。
この場合、その下のスプライトをその上のアルファとブレンドしてレンダリングするようです。これは、テクスチャをどのようにレンダリングするかによるアーティファクトかもしれませんが、前述したように、すべての例はこの1つのテクニックを指し示しています。先に進む前に、サンプルコードを貼り付けます。
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メソッドを使用しています。これは、とりわけブレンド状態を取得します。私はそれが私の問題だとほぼ肯定的です。スプライトをブレンドしたくない、アルファが0のときに透明にしたい。この例では、アルファを0に設定できますが、下のz順序のスプライトが透けて見えるため、両方のタイルをレンダリングします。ブレンド。これは望ましい効果ではありません。より高いzオーダーのスプライトをフェードアウトさせ、そのような方法でその下の色に影響を与えないようにします。
私はXNA開発にかなり慣れていないので、ここから離れるかもしれません。間違ったウサギの穴を下る場合は、遠慮なく正しい方向に進んでください。
TIA