如何在MonoGame中输入纹理?

时间:2013-08-28 20:04:10

标签: c# android monogame

所以..到目前为止我的尝试,这就是发生的事情,游戏并没有延伸:

enter image description here 这就是我这样做的方式:

我声明了这个变量。

RenderTarget2D renderTarget;

在我的game1构造函数中,我有这个:我在这里尝试了实际的屏幕分辨率,同样的事情。

graphics.PreferredBackBufferWidth = 96;
graphics.PreferredBackBufferHeight = 160;

在我的初始化中,我有这个:

renderTarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.PresentationParameters.BackBufferWidth,
            GraphicsDevice.PresentationParameters.BackBufferHeight, false,
            GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.Depth24);

我在这里有这个功能:

protected void DrawSceneToTexture(RenderTarget2D renderTarget)
    {
        // Set the render target
        GraphicsDevice.SetRenderTarget(renderTarget);

        GraphicsDevice.DepthStencilState = new DepthStencilState() { DepthBufferEnable = true };

        // Draw the scene
        GraphicsDevice.Clear(Color.CornflowerBlue);
        spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend, SamplerState.PointClamp,
            DepthStencilState.None, RasterizerState.CullCounterClockwise);
        switch (gameState)
        {
            case GameStates.Menu: { menuState.Draw(spriteBatch); break; }
            case GameStates.Playing: { playingState.Draw(spriteBatch); break; }
            case GameStates.GameOver: { gameOverState.Draw(spriteBatch); break; }
        }
        spriteBatch.End();

        // Drop the render target
        GraphicsDevice.SetRenderTarget(null);
    }

我的绘制方法如下所示:

DrawSceneToTexture(renderTarget);

        GraphicsDevice.Clear(Color.Black);

        spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend,
            SamplerState.LinearClamp, DepthStencilState.Default,
            RasterizerState.CullNone);

        spriteBatch.Draw(renderTarget, new Rectangle(0, 0, actualScreenWidth, actualScreenHeight), Color.White);

        spriteBatch.End();

        base.Draw(gameTime);

1 个答案:

答案 0 :(得分:1)

如果您查看PreferredBackBufferWidth的文档,则说:

  

如果请求输出设备不支持的后缓冲区解析,XNA Framework会自动选择输出设备支持的最高分辨率。例如,如果创建分辨率为1920×1080(1080p或1080i)的图形后缓冲区并在480i分辨率的设备上显示,则后缓冲区会自动调整为480i。

所以,我怀疑发生了什么,当您设置RenderTarget2D时,GraphicsDevice.PresentationParameters.BackBufferWidth的值不是96.

尝试直接设置渲染目标宽度和高度,看看是否能解决您的问题。

renderTarget = new RenderTarget2D(GraphicsDevice, 96, 160, false,
        GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.Depth24);

如果您只是尝试缩放渲染以适应屏幕,则可以通过删除所有DrawSceneToTexture内容来简化您的生活,并在SpriteBatch.Begin方法中设置比例,如下所示:

var scaleX = (float)actualScreenHeight / (float)virtualHeight;
var scaleY = (float)actualScreenWidth / (float)virtualWidth;
var transformMatrix = Matrix.CreateScale(new Vector3(scaleX, scaleY, 1));

spriteBatch.Begin (sortMode, blendState, samplerState, depthStencilState, rasterizerState, effect, transformMatrix);