2

タイトルが少し曖昧かもしれないことは理解していますので、私が何を意味するのかを説明しようと思います. 基本的に私が達成しようとしているのは、さまざまなオブジェクトや画像をたくさん描画することですが、一種のバッファーで描画することです。これにより、後で描画機能を使用してこのバッファーの一部のみを描画できます。

WinForms の水平/垂直スライダー コントロールのように、MonoGame でスクロール機能を作成しようとしていますが、スライダーが機能しています。私が望むのは、スライダーがこのスライダー ウィンドウ内の他のコントロールを正確に切り離すことです。

今、私が達成しようとしていることは何のためにあるのかを理解していRenderTarget2Dます。それを使ってみましたが、私がやりたいことを実現するのは非常に難しいと感じています。現在の私の主な問題は、 で何かを描画すると、RenderTargetを設定すると他のすべてがクリアされることですSetRenderTarget(null)(そのため、ゲーム ウィンドウにもう一度描画します)。

簡単に言えば、次のコードは、RenderTarget2Dコードを実行した後にすべてを描画しますが、その前にすべてをクリアします。

protected override void Draw(GameTime gameTime)
{
    _spriteBatch.Begin();
    _spriteBatch.DrawString(font, "Prior", Vector2.Zero, Color.White);
    _spriteBatch.End();

    RenderTarget2D target = new RenderTarget2D(GraphicsDevice, 320, 110, false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.PreserveContents);
    GraphicsDevice.SetRenderTarget(target);

    _spriteBatch.Begin();
    _spriteBatch.DrawString(font, "Middle", new Vector2(0, 120), Color.White);
    _spriteBatch.End();

    GraphicsDevice.SetRenderTarget(null);

    _spriteBatch.Begin();
    _spriteBatch.Draw(target, new Vector2(0, 120), Color.White);
    _spriteBatch.DrawString(font, "Past", new Vector2(0, 240), Color.White);
    _spriteBatch.End();

    base.Draw(gameTime);
}

また、私はこれらを持っています:

public Game1()
    : base()
{
    _graphics = new GraphicsDeviceManager(this);
    _graphics.PreparingDeviceSettings += OnPreparingDeviceSettings;

    Content.RootDirectory = "Content";
}

private void OnPreparingDeviceSettings(object sender, PreparingDeviceSettingsEventArgs e)
{
    e.GraphicsDeviceInformation.PresentationParameters.RenderTargetUsage = RenderTargetUsage.PreserveContents;
}

最後のビットがどのように重要なのかは想像できませんが、少し多すぎるのではなく、少し多めに追加する方がよいと考えました.

そうです、誰かが何が間違っているのかについて何か考えを持っているなら、私は本当に知りたいと思っています。全く進歩していないようです。

ありがとう

4

1 に答える 1