我正在尝试使用 XNA 制作一个冒险游戏引擎,让您制作看起来像是 90 年代初期的游戏,例如触手之日 and 山姆和麦克斯上路。因此,我希望游戏实际以 320x240 运行(我知道,它可能应该是 320x200,但是嘘),但它应该根据用户设置进行缩放。
它现在工作得还不错,但我遇到了一些我真正希望它看起来的问题more目前的像素化。
这就是我现在正在做的事情:
游戏初始化时:
public Game() {
graphics = new GraphicsDeviceManager(this);
graphics.PreferredBackBufferWidth = 640;
graphics.PreferredBackBufferHeight = 480;
graphics.PreferMultiSampling = false;
Scale = graphics.PreferredBackBufferWidth / 320;
}
缩放是一个公共静态变量,我可以随时检查它,以了解相对于 320x240,我应该将游戏缩放多少。
在我的绘图函数中:
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied, SamplerState.PointClamp, DepthStencilState.Default, RasterizerState.CullNone, null, Matrix.CreateScale(Game.Scale));
这样,所有内容都以 320x240 绘制,并放大以适合当前分辨率(默认为 640x480)。当然,我会进行数学运算,将鼠标的实际坐标转换为 320x240 坐标,依此类推。
现在,这一切都很棒,但现在我想要开始缩放我的精灵,让它们走到远处等等。
看看下面的图片。左上图是游戏以 640x480 运行时的屏幕截图。右边的图像是它“应该”的样子,分辨率为 320x240。底行图像只是将顶行放大到 300%(在 Photoshop 中,而不是在引擎中),因此您可以看到我在说什么。
在 640x480 图像中,您可以看到不同的“线条粗细”;较粗的线条是它真正的样子(一个像素 = 2x2,因为这是在 640x480 下运行),但较细的线条(1x1 像素)也会出现,但由于缩放,它们不应该出现(请参见右侧的图像) )。
基本上,我试图模拟 320x240 显示器,但使用 XNA 放大到任何分辨率,而矩阵转换并不能解决问题。我有什么办法可以做到这一点吗?