Понедельник, 25 Ноября 2024, 02:32

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Зависмость размеров спрайтов от размера окна
goldsphereДата: Суббота, 19 Октября 2013, 07:49 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Назрел такой вопрос, как в играх делают так, что в зависимости от размера окна все спрайты маштабируются, отображаются в нормальном качестве, и на своих местах?

FinderX - Android Аркада

Сообщение отредактировал goldsphere - Суббота, 19 Октября 2013, 07:53
avolkoffДата: Суббота, 19 Октября 2013, 10:21 | Сообщение # 2
частый гость
Сейчас нет на сайте
Это происходит в конвейере визуализации (Rendering Pipeline), на уровне геометрии (The Geometry Stage), при проецировании (Projection) объектов. Есть матрица проекции в которой указано соотношение экрана и прочая фигня...
beskorДата: Суббота, 19 Октября 2013, 11:59 | Сообщение # 3
был не раз
Сейчас нет на сайте
нихрена себе... ну я так понял это пример для 3D, а если для 2D (спрайтов), то можно особо не париться и просто самому рассчитать размеры и координаты. Например W - ширина экрана, H - высота экрана (я думаю в любой среде программирования не составит труда узнать эти значения), w,h - размеры спрайта в % от размеров окна. Получается реальный размер в пикселях равен W*w и H*h, аналогично для положения. Но все равно странный вопрос. Во всех играх интерфейс не в процентах, а как раз в пикселях и чем выше разрешение - тем меньше спрайты интерфейса по отношению к монитору.

сон? а что это?
ах, да, кому интересно, мы тоже игру делаем:
ПАРАДОКС
goldsphereДата: Суббота, 19 Октября 2013, 15:39 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Я пришёл почти к тому же самому. Только я взял как за шаблон определённый размер(например 800, 600), потом получал размеры окна и получал коэффициент соотношения размеров к шаблону. Позицию умножал на этот коэффициент. И масштабировал тоже. Только иногда изображения растягивалось не очень приятно.

FinderX - Android Аркада
FirstДата: Суббота, 19 Октября 2013, 22:47 | Сообщение # 5
Уолтер Брайт
Сейчас нет на сайте
Если тебе интересует по SFML, то обрати внимание, что там уникально решен данный вопрос. То есть, выведи спрайты на экран и сделай окно шире (на весь экран даже) и ты увидишь, как все увеличилось, то есть растянуло, но сама таблица координат так и остается неизменной, то есть, если окно было в оконном режиме 600х200, то таким и останется по сетке координат, но картинка растянется. Ты можешь использовать сглаживание текстур или всего окна, что текстуры выглядели плавными и сглаженными. Для текстур, это функция смуз, а для окна нужно прописывать это при создании - contexsetting(0,0,уровень сглаживания)
goldsphereДата: Воскресенье, 20 Октября 2013, 10:44 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
First, насчёт растягивания текстур - я знаю, просто в моей игре есть выбор размера окна при котором окно пересоздаётся и в таком случае надо вручную растягивать спрайты и скажем, если у меня для каждого спрайта есть своя зона(например проверка нажатия на него) её тоже надо увеличивать.
Цитата First ()
contexsetting(0,0,уровень сглаживания)

А пример можно?


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Воскресенье, 20 Октября 2013, 10:44
FirstДата: Воскресенье, 20 Октября 2013, 13:14 | Сообщение # 7
Уолтер Брайт
Сейчас нет на сайте
Цитата goldsphere ()
А пример можно?


Смотри, это на vb.net пример. Разберись в нем.

Код
Dim WithEvents W As New RenderWindow(New VideoMode(800, 600), "Название окна", Styles.Default, New ContextSettings(4, 4, 32))
zombihelloДата: Понедельник, 11 Июля 2016, 00:08 | Сообщение # 8
был не раз
Сейчас нет на сайте
Я конечно понимаю что прошло уже 3 года и автора эта тема не волнует, но есть такие ребята которым нужна помощь.
Ну давайте я не буду тянуть кота за хвост и перейду сразу к теме.

Мой способ таков: в SFML есть такой класс View ( типо игровой камеры ) и с помощью него можно решить данную проблему.
Т.е мы берем какое-то разрешение на котором у нас будет работать игра, например, 1280х720 и масштабируем игровую камеру под это разрешение

Пример:
разрешение у игрока: 800x600
выбранное разрешение: 1280х720
Далее, мы находим разницу ( W = 1280-800; H=720-600 ), а потом ее прибавляем к разрешению игрока ( 800+W; 600+H )

Пример на коде:
Код

    Vector2f Difference; // вектор в котором будет хранится разница
    Difference.x = 1280 - 800; // находим разницу длины. ВАЖНО: Выбраное разрешение должно стоять первым ( если у игрока разрешение будет больше, то оно его отнимет )
    Difference.y = 720 - 600;  // находим разницу высоты.
    View( FloatRect( 0, 0, 800 + Difference.x, 600 + Difference.y ) ); // создаем камеру с разрешением 1280x720. Ну а дальше мы эту камеру применяем на окне ( setView )


Laudate sol! | Praise The Sun! | Слава солнцу!
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг