Ответ в теме: Трансформация изображения (а так же его адаптивность под разные разрешения)

SFML и C++ Уроки \ Разработка игр Форумы SFML Graphics Трансформация изображения (а так же его адаптивность под разные разрешения) Ответ в теме: Трансформация изображения (а так же его адаптивность под разные разрешения)

#2900
+5
MatrixDeity
MatrixDeity
Модератор
Сообщений:31

Зарегистрирован:
20.06.2015

Репутация:24

Heisenberg, а я вот смотрю на название темы и вижу, что это не так :)

Вообще, эта тема достойна отдельной статьи. Вы не находите? Но чтобы не разводить срач, так и быть, изложу свои соображения:

Как сделать игру “разрешение-независимой”?

Вариант I(A). Как уже было сказано, масштабировать спрайты. Выбираем некоторое опорное разрешение (например, 1600х900) и рисуем текстурки под него. А далее уже меняем их размеры setScale‘ом.

Способ, конечно, допустим, но далеко не идеален. На экране 800х600, например, изображение будет сплюснутым, а на 1920х1080 – пикселизированным.

Вариант I(B). То же самое, но с некоторой модернизацией: масштабировать изображение только когда разрешение монитора значительно отличается от дефолтного. Например, ширина экрана игрока в 2 раза меньше ширины разрешения по умолчанию, значит уменьшаем текстуры в два раза (и по оси ‘x’, и по оси ‘y’). А если разница невелика (например, монитор 1920х1080), то пренебречь масштабированием.  Очевидно, что такой способ неточен, но зато даст недеформированную картинку. Тоже не рекомендовал бы им пользоваться (хотя, не возьмусь утверждать наверняка, кажется в Starbound используется именно этот метод).

Вариант II. Радикальный вариант: чтобы не масштабировать спрайты можно просто менять View под размер окна. Тогда на экране будет меняться количество тайлов, “попадающих” в экран. Этот метод из Террарии. Минусы: на больших экранах будет слишком много деталей, и они будут слишком мелкие; фон на большинстве мониторов будет не полностью умещаться на экран (а еще он должен быть достаточно большого размера).

Вариант III. Рисовать текстуры для нескольких разрешений:) Тут ничего комментировать не буду – и так все ясно.

Вариант IV. Комбинирование нескольких вариантов. Например, I(B) и III. Это обеспечит реальные размеры текстур близкие к требуемым и масштабирование не слишком исказит картинку, и в то же время рисовать придется меньше.

А вообще, смотрите сами, по ситуации. Идеального рецепта, как всегда, нет :)

P.S. Heisenberg, как Вы думаете, я разумно изложил? :)