Ваш процесс рисования, чтобы сохранить пропорции объектов на экране?
Всем привет.
Вот у меня экран целевого устройства, с целевым разрешением. И мне нужно рисовать детали уровня, объекты, персонажей. Все уроки, которые встречал, начинались с создания размера изображения объекта\персонажа, размер холста брали как будто из головы. Но при таком подходе непонятно, будут ли они в пропорциях относительно других изображений. Т.е. наверняка придется масштабировать изображение - уменьшать, увеличивать. А речь о растре.
Как сохранить пропорции? Сначала создавать холст размером с экран, на нем прямоугольниками набрасывать размеры предметов и персонажей, затем вымерять размеры этих прямоугольников, а потом создавать отдельные файлы с холстами этих размеров? И только потом рисовать в них?
Либо я не понимаю, и на самом деле никаких искажений не будет.
Не совсем понятно что именно вас интересует.
Если вопрос именно о спрайтах\текстурах то тут лучше изначально рисовать чуть крупнее а потом ужать его.
Если именно рендер то тут все интереснее. Есть много трюков. К примеру можно сделать "виртуальный" рендер(может быть больше\меньше реального экрана) а результат из него подгонять под текущий экран\разрешение. Можно пойти по пути опоры на ширину или высоту экрана.
Если вопрос о пропорциях спрайтов\текстур так и тут все просто, их можно также легко сжимать\растягивать и т.д. в любое время.
Например, под разрешение 1920×1080 у 6го айфона.
Мое предположение:
1. Создаю холст размером 1920×1080.
2. Прямоугольниками размечаю размеры объектов и персонажей.
3. Считаю размеры прямоугольников.
4. Создаю файл с размером холста как у прямоугольника объекта 1, рисую.. И так со всеми объектами.
В уроках все время, например: создадим изображение размером 512 на 512. А как изображение затем будет соответствовать всему остальному на экране - непонятно.
nevro: вам бы почитать техническую часть как работает рендер =)
1) В целом. Вы рисуете абсолютно как угодно и в каком угодно разрешении объекты(спрайты\текстуры).
2) Далее уже в коде игры вы берете нужную текстуру, говорите что рисовать будем по координатам "Х" и "У", с шириной "W" и высотой "H", с поворотом "А". И тут пофиг какаой спрайт\текстура т.к. вы ее тянете\сжимаете\крутите как нужно независимо от самой png\jpg\dds\tga.
3) Координаты в игре существуют мировые(WORLD) - глобальная для всей карты. Локальный(local) внутри\относительно чего то в мировых. Т.е. к примеру у вас игра из всего одного экрана и он смещаться никуда не будет(1920х1080). Пусть вертикаль это Y а горизонталь X, нулевая точка левый нижний угол. Нужно отрисовать спрайт размером 64х32 в центре экрана. Реально спрайт имеет разрешение 128х64. Рассчитываем координаты: Глобально вертикаль 1920\2 = 960 и горизонталь 1080\2 = 540. Если попытаться отрисовать по ним то текстура отрисуется левым нижним углом от цента экрана, значит нужно учесть локальные координаты. Локально вертикаль 64\2 = 32 и горизонталь 32\2 = 16. Теперь считаем итоговая вертикаль 960-32= 928 и горизонталь 540-16 = 524. В движке игры будет подобная функция: draw(X,Y,ширина,высота,вращение)
соответсвенно вы пишите: draw(524,928,64,32,0)
и видите свою текстуру ровно в центре экрана нужного размера 64х32 пикселя а не ее реальный размер 128х64.
Как и в каком разрешении вы рисовали текстуру на холсте роли не играет совсем.
4) Жестко опираться на размеры спрайта при рисовании на экран плохая затея. Лучше представляете что вот там то и тамто будет нарисован кирпич такой то высоты и ширины. Сама текстура кирпича может быть во много раз больше или меньше реально необходимого размена в мире но при рисовки движек игры ее деформирует до нужного на экран согласно вашей необходимости.