Почтовый ящик в XNA на ПК - PullRequest
       12

Почтовый ящик в XNA на ПК

0 голосов
/ 15 августа 2010

Я знаю, что когда вы разрабатываете для Xbox в XNA, вы просто устанавливаете разрешение на 1280x720, и Xbox просто позаботится о вещах, но на ПК у меня возникают некоторые проблемы с правильной обработкой разрешения.

Я бы хотел, чтобы он мог работать с другими разрешениями, но на самом деле я рад сделать игру всегда широкоэкранной и просто иметь почтовые ящики на экранах 4: 3.Я уже могу справиться с масштабированием игры и ее компонентов, но не могу понять, как получить ее в виде почтового ящика.

Очевидно, что в оконном режиме это не понадобится, но при работе в полноэкранном режиме мне просто нужно выяснить, какчтобы игра рисовалась только на части экрана.

Какой лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 15 августа 2010

Вы можете установить GraphicsDevice.Viewport для окна просмотра, которое вы хотите использовать.

В документации есть пример того, каксделать это (он делает это для разделения экрана, но для почтового ящика в одном представлении используется та же концепция).

Графический процессор будет обрабатывать отсечение для этого окна просмотра.

Кроме того, ваш проекционное пространство покроет этот видовой экран, поэтому вам не нужно беспокоиться о выполнении каких-либо преобразований (за исключением того, что SpriteBatch работает в пространстве, равном пиксельному окну просмотра, а не в проекционном пространстве, поэтому выможет потребоваться масштабирование, если ваш видовой экран больше или меньше, чем 1280x720; я опишу больше о различных пространствах, включенных в этот ответ ).

Чтобы получить черные полосы, просто выполните GraphicsDevice.Clear(Color.Black) с полным окном просмотра.

2 голосов
/ 15 августа 2010

Вы можете использовать GraphicsDevice.Viewport, чтобы получить соотношение сторон, которое вы можете использовать для построения масштабирующей матрицы для использования с SpriteBatch, и, возможно, использовать аффинный перевод для позиционирования экрана центра обработки спрайтов.

Вы можете вызывать GraphicsDevice.Clear каждый кадр, но если это покажется вам расточительным, просто нарисуйте черный прямоугольник вместо очистки над новым окном просмотра.

Например, если вы хотите получить соотношение сторон 16: 9, вы можете сделать это (потерпите меня, я использую XNA 4, так что это может немного отличаться):

float aspect = 16.0f / 9.0f;

GraphicsDevice.Clear(Color.Black);
Matrix transform = Matrix.CreateScale(1, GraphicsDevice.Viewport.AspectRatio / aspect, 1) * Matrix.CreateTranslation(0, (GraphicsDevice.Viewport.Height - GraphicsDevice.Viewport.Height / aspect) / 4.0f, 0);
spriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, null, null, transform);

// do your drawing here

sBatch.End()

Нет необходимости каждый раз восстанавливать transform, чтобы вы могли просто сохранить его как личную переменную-член в Game.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...