不同drawableComponents XNA中的多个RenderTargets

时间:2013-12-11 21:05:16

标签: c# xna rendertarget

大家好我有点问题。

我有两个DrawableGameComponets(bigApple,smallApple),我正在绘制RenderTarget,然后在后备缓冲区中绘制RenderTarget但这在每个{{{}}中独立发生1}}。

我想要达到的目标是DrawableGameComponent两个正确地绘制在另一个之上。

这样的事情:
这是两个drawableComponent的屏幕,每个组件都没有rendertargets。 enter image description here

但不是我得到这个:
这是在每个组件中都有drawableComponent和rendertargets的屏幕。 enter image description here

这是我正在努力的一个小游戏。我打算在一个可绘制的组件和图像中显示来自相机和另一个可绘制的游戏组件游戏本身。但是,一旦我向Componets List添加了另一个DrawableGameComponents,就无法看到上一个添加的那个。

这是每个可绘制组件的代码。

SmallApple:

GameComponent

- 和BigApple类

public class SmallApple:DrawableComponent2D
{
    Texture2D apple;

    public SmallApple(Game game)
        : base(game)
    {
        //Do nothing
    }

    protected override void LoadContent()
    {
        apple = Game.Content.Load<Texture2D>("apple");

        this.Size = new Vector2(apple.Width,
            apple.Height);

        renderTarget = new RenderTarget2D(GraphicsDevice,
            (int)Size.X,
            (int)Size.Y,
            false,
            SurfaceFormat.Color,
            DepthFormat.None,
            this.Game.GraphicsDevice.PresentationParameters.MultiSampleCount,
            RenderTargetUsage.PreserveContents);
        base.LoadContent();
    }

    public override void Initialize()
    {
        base.Initialize();
    }

    public override void Draw(GameTime gameTime)
    {
        GraphicsDevice.SetRenderTarget(renderTarget);
        GraphicsDevice.Clear(ClearOptions.Target, Color.Transparent, 1f, 0);

        this.SharedSpriteBatch.Begin(SpriteSortMode.Immediate, null);
        this.SharedSpriteBatch.Draw(this.apple, this.Position, Color.White);
        this.SharedSpriteBatch.End();

        GraphicsDevice.SetRenderTarget(null);

        this.SharedSpriteBatch.Begin();
        this.SharedSpriteBatch.Draw(apple, this.Position,Color.White);
        this.SharedSpriteBatch.End();
        base.Draw(gameTime);
    }

}

类DrawableComponent2D是包含drawablegameComponent的遗产并具有一些可以使用的变量的类。

2 个答案:

答案 0 :(得分:0)

您的XNA版本是什么?
如果您使用的是XNA 3.1,那么您的问题就在GraphicsDeviceCapabilities.MaxSimultaneousRenderTargets property

答案 1 :(得分:0)

解决!!。我必须向委托添加一个方法:

graphics.PreparingDeviceSettings;

所以这是方法:

private void GraphicsDevicePreparingDeviceSettings(object sender,PreparingDeviceSettingsEventArgs e){

e.GraphicsDeviceInformation.PresentationParameters.RenderTargetUsage = RenderTargetUsage.PreserveContents;

}


将它添加到graphicsDeviceManager只需一行:

的图形。 PreparingDeviceSettings + = GraphicsDevicePreparingDeviceSettings;

瞧!!!感谢您的支持