我编写了一个 2D Jump&Run 引擎,生成了一个 320x224 (320x240) 的图像。为了保持老派的“像素”感觉,我想根据用户的分辨率将结果图像缩放 2 或 3 或 4。
我不想缩放每个 Sprite ,而是缩放生成的图像!
提前致谢 :)
最佳答案
Bob's answer将过滤模式更改为 TextureFilter.Point
是正确的保持美好和像素化。
但可能比缩放每个 Sprite 更好的方法(因为您还必须缩放每个 Sprite 的位置)是将矩阵传递给 SpriteBatch.Begin
,像这样:
sb.Begin(/* first three parameters */, Matrix.CreateScale(4f));
这将为您提供所需的缩放比例,而无需修改所有绘制调用。但是值得注意的是,如果您在游戏中使用浮点偏移,那么在您放大(使用任一方法)后,最终会出现与像素边界不对齐的情况。
对此有两种解决方案。第一个是有这样的功能:
public static Vector2 Floor(Vector2 v)
{
return new Vector2((float)Math.Floor(v.X), (float)Math.Floor(v.Y));
}
然后每次绘制 Sprite 时通过该函数传递您的位置。尽管如果您的 Sprite 使用任何旋转或偏移,这可能不起作用。您将再次修改每个绘图调用。如果您想要对整个场景进行简单的逐点放大,那么执行此操作的“正确”方法是以原始大小将场景绘制到渲染目标。然后将渲染目标绘制到屏幕上,放大(使用
TextureFilter.Point
)。你想看的函数是
GraphicsDevice.SetRenderTarget
. This MSDN article可能值得一读。如果您正在使用或正在迁移到 XNA 4.0,this might be worth reading .我找不到一个更简单的 XNA 样本,但是 Bloom Postprocess示例使用一个渲染目标,然后对其应用模糊着色器。您可以简单地完全忽略着色器并进行放大。
关于xna - 如何缩放屏幕上的像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3283563/