0

私はしばらくの間XNAを使用していて、そのインターフェースを使用することを本当に楽しんでいます。現在、私たちは「戦場の霧」システムを作ろうとしています。私たちはRTSを作成しており、基本的にマップを覆い隠そうとしています。マップ上のユニットは影響力を持ち、何が起こっているかを示します。それらは地図上の特定のエリアを明らかにします。以前はタイルベースのインターフェイスを使用していましたが、外観に満足できませんでした。代わりに、画面に黒いマスクを描画してから、DrawUserPrimitivesを使用して透明な円を表示することにしました。問題は次のとおりです。画面に黒いマスクを描画し、続いて透明な円を描画すると、画面は完全に黒になります。順序を逆にしても何も変わりません。また、見つけたすべてのSpriteBatchBlendStateを試しました。

現在の方法:現在、画面に完全な黒のテクスチャを描画してから、透明な円を描画しています。結果は完全に黒い画面になります。

望ましい結果:円を描くと画面の一部が表示されますが、残りは隠されたままになります。問題を起こさずに互いに近くにある可能性のある、すべて独自の半径を持つ複数の円を描くことができます。

基本的に、黒いマスクを描画しようとしていますが、画面の一部を表示します。円の中心を透明にしようとしているので、円のテクスチャを作成してエッジを透明にすることはできません。中心を透明にすることはできません。その場合、そのような2つのテクスチャが互いに近くにあると、それらの境界が表示されるためです。マスクを作成してから、そのセクションを表示するにはどうすればよいですか?

よろしく

アレス

4

1 に答える 1

1

グラフィックを1つのレンダリングターゲットに通常どおりにレンダリングし、次に別のレンダリングターゲットの黒の背景に白で表示領域をペイントしてから、を使用して2番目を最初にレンダリングすることができますMin BlendFunction

または、1つのレンダリングターゲットのみを使用して、グラフィックを通常どおりに描画し、アルファチャネルをクリアして(ColorWriteChannels = Alphaとアルファブレンドファクターの両方が0の画面全体に長方形をペイントすることにより)、ColorWriteChannels=Alphaのみで表示領域を描画します。

于 2013-03-21T20:17:37.203 に答える