Вопросы про разрешение экрана
|
|
useruser | Дата: Вторник, 05 Сентября 2017, 13:35 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Недавно начал изучать тему создания игр и Game Maker Studio 2.0. Вопрос такой - как сделать игру под разные разрешения экрана? Планирую сделать игру в полноэкранном режиме. Посмотрел кучу видео по этой теме и так и не нашел ответа на свой вопрос. Может что то и не понял.
Все ниже моё представление о графике и ИМХО. Возможно и неверное. ------- Давайте разберем проблему разрешения экрана на примере игры - шахматы. Игрок видит всю доску и фигуры на доске. Т.е. всю комнату, говоря языком Game Maker Studio. Пусть мы нарисовали графику (растровая) для разрешения экрана 1024х768. Выглядит отлично. Что нам теперь важно, с точки зрения графики? Две вещи - положение графики (картинок объектов) и их пропорциональность.
То есть - если у пользователя разрешение экрана не 1024х768, а 800х600 (рассмотрим простой пример с соотношением сторон 1.3) то мы должны как то уменьшить всю нашу картинку. Доску, фигуры и т.д. И тут вопрос - как правильно это делать?
Хорошо, мы уменьшили нашу картинку. Пропорции и положение сохранено, но графика стала хуже. Уже не видно части линий и изгибов. Объективно - уменьшение растровой графики вызовет её ухудшение. Мы потеряем часть пикселей при уменьшении. А вот при пропорциональном увеличении произойдет дублирование пикселей (при равном соотношении сторон) и качество графики должно остаться прежним.
Несмотря на это мы видим, что в большинстве игр то же окно авторизации (как и другие объекты) намного больше на разрешении 800х600 и меньше на 1024х768. Т.е. окно не изменяет свой размер. Выходит окно имеет постоянный размер и только меняет позицию - всегда по центру экрана. Т.е. при запуске игры идет расчет положения объектов в зависимости от разрешения экрана? Например в игре Warcraft 3. При низком разрешении мы увидим большие здания, юнитов и немного карты вокруг. При высоком - мы увидим нормальные здания, юнитов и большой участок карты вокруг. Наверно на плазменной панели на пол стены мы увидим пол карты - если игра это позволяет.
Но вернёмся к нашей игре - шахматы. Мы хотим сделать наилучшую графику на всех разрешениях. Уменьшать - плохо. Как сделать хорошую графику на низком разрешении? В принципе мы можем изменить область камеры. Не показывать что за доской, а сфокусировать камеру на доске (viewport). Тогда будет не очень удобно - часть доски может быть не видна. Но цель мы достигнем.
А если нам нужно сделать хорошую графику на высоком разрешении? Мы можем увеличивать картинку или увеличивать область камеры. Если у нас за доской ещё что то есть. То есть если на 1024х768 доска занимала весь экран, то на 1920х1080, при увеличении области камеры, доска будет занимать уже пол экрана. А при увеличении картинки - графика будет пропорционально увеличена на весь экран.
Но не всегда разрешения экрана пропорциональны (1.3). Например 1024х768 (1.3) и 1366х768 (1.7). И тогда будет искажение графики либо черные полосы на экране. И как тут быть? На примере шахмат. Мы уже не можем пропорционально увеличить картинку. Не хватает ширины экрана. И тут мы получим черную полосу справа - около 342 пикселя. Но мы можем сделать огромную комнату, изменять области камеры. Но тогда будет около 342 пикселей справа. А при больших разрешениях - куча свободного места. Положение графики нарушено. То, что раньше было в правом углу теперь на 342 пикселя левее. Т.к. игра разрабатывалась под ширину экрана 1024, а у нас 1366. Значит нужно менять положение объектов, если это возможно. Т.е. производить расчет положения объекта относительно разрешения экрана. Картинка всегда должна быть в правом нижнем углу? Значит её координата х = ширина экрана-ширина картинки. Неужели нужен такой расчет? --- Вот такие мысли.
|
|
| |
TLT | Дата: Вторник, 05 Сентября 2017, 17:47 | Сообщение # 2 |
Сейчас нет на сайте
| Используй для объектов координаты от центра, например. Относительные координаты от объектов.
Дао, выраженное словами, не есть истинное Дао.
|
|
| |
Space_worm | Дата: Среда, 20 Сентября 2017, 23:02 | Сообщение # 3 |
уже был
Сейчас нет на сайте
| Цитата useruser ( ) Значит нужно менять положение объектов, если это возможно. Т.е. производить расчет положения объекта относительно разрешения экрана. Картинка всегда должна быть в правом нижнем углу? Значит её координата х = ширина экрана-ширина картинки. Возможно уже поздний вечер, но я ни черта не понял.
Насколько я понимаю, при работе с разрешением есть 2 основных момента: 1) Для того чтобы не портились растровые изображения, отношение ширины и высоты вида в комнате к соответственно ширине и высоте окна должны быть целыми. При этом получается, что отношение высоты и ширины вида равно отношению высоты и ширины окна. 2) Если твой вид (вся комната на примере с шахматами) невозможно полностью вписать в окно, то есть указанные в последнем предложении отношения не равны друг другу, то
а) подгоняешь свой вид под размеры окна, а если это невозможно
б) таки да, "черные полосы" по бокам - единственный оставшийся выход. Только необязательно делать именно черные полосы, можно же графически приятно оформить лишнее пространство.
Если английского не боишься, зацени этот видос:
https://www.youtube.com/watch?v=jCl6zT0eQLU&list=PLXkVsacazW2qvdnKNzgBLkUwlgi3FU-VO
|
|
| |
n0th1ng | Дата: Четверг, 21 Сентября 2017, 05:22 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| Варианты: 1. Виртуальное разрешение. Игру делаешь в одном разрешении и масштабируешь в зависимости от разрешения дисплея игрока. Не знаю, умеет ли такое GM. 2. Координаты делаешь в зависимости от разрешения экрана. 3. Вручную для каждого разрешения. -Чтобы не было черных полос, фон игры делаешь максимально широким чтобы влезало 16:9, но чтоб в 4:3 по бокам в "ушах" не было ничего полезного. Или наоборот: делаешь фон в 4:3, но так чтобы сверху и снизу тоже не было ничего при обрезании в 16:9. В GUI делаешь привязку по углам или прописываешь вручную координаты для каждого разрешения(как в PVZ, там в зависимости от соотношения сторон меняется положение меню выбора - сверху или слева). -Увеличение игрового поля при увеличении разрешения - это плохо. При любом разрешении игроки должны видеть примерно одинаковую картинку. Искажений пропорций не должно быть, круг не должен становится овалом. -В уменьшении картинки не все так плохо, линия в 1 пиксель при уменьшении в 2 раза смешается с соседними пикселями и все равно будет виден. А при увеличении не будет тупое дублирование пикселей(если только не делать это специально), а будет интерполяция пикселей. Если совсем плохо будет, можно использовать разные ассеты для разных разрешений.
|
|
| |