Используя XNA, я пытаюсь создать движок приключенческой игры, который позволит вам создавать игры, которые выглядят так, как будто они вышли из начала 90-х, например Day of the Tentacle и Сэм и Макс отправляются в путь . Таким образом, я хочу, чтобы игра действительно запускалась при разрешении 320x240 (я знаю, вероятно, должно быть 320x200, но шшш), но она должна масштабироваться в зависимости от пользовательских настроек.
Сейчас он работает нормально, но я сталкиваюсь с некоторыми проблемами, когда я действительно хочу, чтобы он выглядел более пиксельным, чем сейчас.
Вот что я делаю прямо сейчас:
При инициализации игры:
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, и преобразования матриц не помогают. Есть ли способ сделать это?