Масштабирование всего экрана в XNA

Используя 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, а не в движке), поэтому вы можете понять, о чем я говорю.

image showing the difference in scaling as the resolution changes

На изображении 640x480 вы можете видеть разную «толщину линий»; более толстые линии - это то, как он должен выглядеть на самом деле (один пиксель = 2x2, потому что он работает с разрешением 640x480), но и более тонкие линии (1x1 пиксель) также появляются, когда они не должны, из-за масштабирования (см. изображения справа ).

В основном я пытаюсь имитировать дисплей 320x240, но увеличенный до любого разрешения с помощью XNA, и преобразования матриц не помогают. Есть ли способ сделать это?

9
задан Adam Rezich 29 September 2011 в 20:12
поделиться