0

これが簡単な質問と回答であることを願っていますが、xna と microsoft は不必要に複雑にしているようです。

画面全体を覆う背景テクスチャがあります。次に、背景テクスチャの上に描画したい前景テクスチャがあります。ご想像のとおり、フォアグラウンド テクスチャには透明な領域があります。私が抱えている問題は、前景テクスチャが透明な場所ではどこでも、背景画像ではなくグラフィックデバイスの色が青に見えることです。

さらに詳しい情報を追跡しました。前景テクスチャのサイズを変更していますが、サイズ変更が原因のようです。

どんな提案や指針も大歓迎です。

Draw(...)
{
ScreenManager.Game.GraphicsDevice.Clear(Color.DarkBlue);
SpriteBatch spriteBatch = this.ScreenManager.SpriteBatch;
spriteBatch.Begin();

// draw the background
spriteBatch.Draw(_backgroundTexture, _backgroundPosition, null, Color.White, 0f,
                 Vector2.Zero, 1.0f, SpriteEffects.None, 0f);
spriteBatch.Draw(Resize(_foregroundTexture,100,100), _foregroundPosition, null, Color.White, 0f,
                 Vector2.Zero, 1.0f, SpriteEffects.None, 0f);

spriteBatch.End();
}

Texture2D Resize(texture2D, float newWidth, float newHeight)
{
RenderTarget2D renderTarget;
Rectangle destinationRectangle;
SpriteBatch spriteBatch;

renderTarget = new RenderTarget2D(graphicsDevice, (int)newWidth, (int)newHeight);
destinationRectangle = new Rectangle(0, 0, (int)newWidth, (int)newHeight);
spriteBatch = new SpriteBatch(graphicsDevice);

graphicsDevice.SetRenderTarget(renderTarget);

spriteBatch.Begin();
spriteBatch.Draw(texture2D, destinationRectangle, Color.White);
spriteBatch.End();

graphicsDevice.SetRenderTarget(null);

return renderTarget;
}
4

1 に答える 1

0

サイズを変更するときは、次のスプライト バッチ パラメータを指定する必要があります...

spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Opaque);

于 2012-06-10T05:17:38.877 に答える