Не существует предопределенного способа растянуть область просмотра, чтобы она аккуратно вписывалась в экран и чтобы все ваши спрайты выглядели так же, как они, по порядку. Рендеринг в цель рендеринга - хороший способ масштабирования, хотя может быть немного сложным. Особенно, если вы попадете в эффекты постобработки.
Чтобы масштабировать вашу игру, нам нужно сделать несколько вещей. Сначала вам нужно выбрать разрешение по умолчанию, например 800x600. Сделайте свою игру полноценной и работайте в таком разрешении, как это.
Как только у вас будет готовая игра в этом разрешении, мы сможем изменить размер экрана и при этом все уместить.
Сначала получите ширину и высоту области просмотра
float width = GraphicsDevice.Viewport.Width;
float height = GraphicsDevice.Viewport.Height;
Теперь найдите множитель масштаба:
float xScale = width / 800.0f;
float yScale = height / 600.0f;
Значения шкалы должны быть плавающими или двойными, и обязательно, чтобы ваши константы из вашего разрешения по умолчанию также были плавающими или двойными. Если их нет, то при выполнении вычислений десятичные разряды будут опущены. Оставить нам округленное целое число, которое неточно и приведет к неправильному масштабированию.
Теперь, когда у нас есть масштаб, мы можем внести некоторые изменения, просто умножив наши масштабные коэффициенты на наши значения положения и размера.
Допустим, ваша позиция спрайта была
pos.x = 400;
pos.y = 240;
теперь это станет
pos.x = 400 * xScale;
pos.y = 240 * yScale;
Теперь это означает, что мы немного изменим способ рисования спрайта.
spritebatch.Draw(this.texture, new Rectangle(this.position.x, this.position.y, this.texture.Width * xScale, this.texture.Height * yScale), Color.white);
Здесь мы рисуем спрайт в его масштабированной позиции и масштабируем его размер в зависимости от размера текстуры, которую мы пытаемся нарисовать.
Примечание. при масштабировании с помощью этого метода все ваши размеры и положение для столкновения также должны быть масштабированы, чтобы это работало.
person
Andrew Cumming
schedule
27.05.2013