5

実行時に RenderTargets を変更しようとしているので、実行時にいくつかの要素を描画し、それらを操作して、最後にテクスチャを画面に描画できます。問題は、実行時に RenderTarget を変更すると画面が紫色になることです。Drawで取得したコードは次のとおりです。

        RenderTarget2D tempTarget = new RenderTarget2D(GraphicsDevice, 128, 128, 1,
            GraphicsDevice.DisplayMode.Format, GraphicsDevice.PresentationParameters.MultiSampleType,
            GraphicsDevice.PresentationParameters.MultiSampleQuality, RenderTargetUsage.PreserveContents);

        GraphicsDevice.SetRenderTarget(0, tempTarget);
        GraphicsDevice.Clear(ClearOptions.Target, Color.SpringGreen, 0, 0);
        GraphicsDevice.SetRenderTarget(0, null);

実行時に RenderTarget を作成する方法は問題ではないようです (実行時にインメモリ テクスチャを作成し、SpriteBatch で描画する必要があります) と、完全に紫色の画面になります。これを修正するにはどうすればよいですか?

4

3 に答える 3

3

Draw 以外の場所に RenderTarget を作成し、Update 中に描画し、結果のテクスチャを保存 (および必要に応じて操作) し、Draw 中にそのテクスチャを描画するのが最適なオプションのようです。

于 2010-07-17T06:51:06.787 に答える
2

これが遅いことはわかっていますが、解決策は、画面をクリアして他のアイテムの描画を開始する前に、RenderTargetに書き込むことです。

protected override void Draw(GameTime gameTime)
{
     GraphicsDevice.SetRenderTarget(_renderTarget);

     //...
     //Perform Rendering to the specified target
     //...

     GraphicsDevice.SetRenderTarget(null);

     GraphicsDevice.Clear(Color.CornflowerBlue);

     //...
     //Code that draws to the users screen goes here
     //...
}

これにより、他の人が提案しているようにUpdateメソッドでレンダリングできなくなります。これは、多くの面で直感に反します。

于 2013-01-31T17:47:53.090 に答える
1

spritebatch.End()呼び出されると、オブジェクトはバックバッファに書き込まれますtempTarget。テクスチャーを作るには、

  • ターゲットを変更する
  • 通話開始
  • すべてのドローをコールする
  • スプライトバッチを終了する
  • ターゲットを null に戻す

次にrender2dを使用します

于 2011-07-08T20:49:51.177 に答える