1

我目前正在使用 XNA 4 开发一款老式游戏。我的图形资产基于 568x320 分辨率(16/9 比例),我想更改我的窗口分辨率(例如 1136x640)并且我的图形在不拉伸的情况下进行缩放,即他们保持像素方面。

我怎样才能做到这一点?

4

2 回答 2

2

哦,天哪 !!!!我懂了 !只需在 spriteBatch.Begin 方法中提供 SamplerState.PointClamp 即可保持酷炫的像素视觉效果 <3

spriteBatch.Begin(SpriteSortMode.Immediate,
                    BlendState.AlphaBlend, 
                    SamplerState.PointClamp,
                    null,
                    null,
                    null,
                    cam.getTransformation(this.GraphicsDevice));
于 2013-01-08T20:41:51.530 回答
2

您可以使用 aRenderTarget来实现您的目标。听起来您不想根据每个可能的屏幕尺寸进行相应的渲染,因此,如果您的图形不依赖于鼠标等其他图形功能,那么我将使用 aRenderTarget并将所有像素数据绘制到该尺寸,然后再绘制将其绘制到实际屏幕上,允许屏幕拉伸它。

这种技术也可以用在其他方面。我使用它在我的游戏中绘制对象,因此我可以轻松更改旋转和位置,而无需计算对象的每个精灵。

例子:

void PreDraw() 
    // You need your graphics device to render to
    GraphicsDevice graphicsDevice = Settings.GlobalGraphicsDevice;
    // You need a spritebatch to begin/end a draw call
    SpriteBatch spriteBatch = Settings.GlobalSpriteBatch;
    // Tell the graphics device where to draw too
    graphicsDevice.SetRenderTarget(renderTarget);
    // Clear the buffer with transparent so the image is transparent
    graphicsDevice.Clear(Color.Transparent);

    spriteBatch.Begin();
    flameAnimation.Draw(spriteBatch);
    spriteBatch.Draw(gunTextureToDraw, new Vector2(100, 0), Color.White);

    if (!base.CurrentPowerUpLevel.Equals(PowerUpLevels.None)) {
        powerUpAnimation.Draw(spriteBatch);
    }
    // DRAWS THE IMAGE TO THE RENDERTARGET
    spriteBatch.Draw(shipSpriteSheet, new Rectangle(105,0, (int)Size.X, (int)Size.Y), shipRectangleToDraw, Color.White);


    spriteBatch.End();
    // Let the graphics device know you are done and return to drawing according to its dimensions
    graphicsDevice.SetRenderTarget(null);
    // utilize your render target
    finishedShip = renderTarget;
}

请记住,在您的情况下,您将RenderTarget使用 568x320 的尺寸进行初始化并根据该尺寸进行绘制,而不必担心任何其他可能的尺寸。一旦你给RenderTargetspritebatch 绘制到屏幕上,它会为你“拉伸”图像!

编辑:

对不起,我浏览了这个问题并错过了你不想“拉伸”你的结果。这可以通过RenderTarget根据图形设备将最终绘制到您指定的尺寸来实现。

于 2013-01-08T14:16:44.693 回答