Вы можете использовать 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
.