Анатолий Адонин

Анатолий Адонин 

Разработка на Python / Renpy

375subscribers

87posts

Showcase

16

33 Контейнеры vbox и hbox в Renpy

Контейнеры в Renpy предназначены для группировки нескольких элементов вместе (текста, кнопок, изображений и т.д.). Ранее, при добавлении нескольких строк в экран, мы для каждой из них писали свою позицию.
Если поместить все строки в один общий контейнер, то позицию можно указать только контейнеру, а все элементы внутри него будут перемещаться вместе с ним. Представьте, что у вас есть несколько яблок на столе. Для их перемещения по плоскости нужно взять каждое и сдвинуть. Вы можете взять коробку, положить яблоки внутрь, и перемещая её сдвигать все яблоки сразу.
В Renpy есть несколько вариантов контейнеров с разным функционалом.
Контейнер vbox (vertical box) выстраивает все вложенные элементы строго вертикально, располагая их сверху вниз в порядке объявления в коде. Его использование можно увидеть в главном меню, где кнопки группируются сверху вниз. Также он может быть полезен при создании инвентарей, списков и других интерфейсов, где важна логическая вертикальная иерархия.
В примере выше мы указали позицию только для контейнера, а все его элементы переместились в центр вместе с ним. Это позволяет значительно ускорить вёрстку, и делает код чище.
Благодаря встроенным параметрам отступов и выравнивания, vbox легко масштабируется. Добавление нового элемента автоматически сдвигает остальные, сохраняя аккуратный вид, без ручной правки координат.
Контейнер hbox (horizontal box) работает аналогично, но раскладывает элементы горизонтально.
На последнем скрине можно заметить, что элементы не имеют отступов между собой, из-за чего они "сбиваются в кучу". Для настройки используются дополнительные параметры:
spacing - устанавливает промежуток между элементами
xfill True (для hbox) - раскладывает элементы таким образом, чтобы они заполняли всё пространство контейнера. yfill True (для xbox) 
По умолчанию созданный контейнер имеет размер на весь экран, параметр size позволяет указать точный размер.
box_wrap True - Если все элементы не вмещаются в одну строку, остальные будут перенесены на новую.
null height (для xbox) - позволяет установить промежуток только между двумя элементами. В отличии от spacing, который устанавливает одинаковый промежуток межу всеми элементами. Может быть полезно, например, для отступа заголовка.
null width - аналогичная настройка для hbox
***
Код из урока:
rpy
screen_example.rpy5.86 Kb
Предыдущий урок:
32 Стилизация текста в экранах screen
Следующий урок:
Здесь будет ссылка
Все уроки здесь
Subscription levels3

Личный состав

$1.1 per month
Участник экспедиции

Колонист

$2.92 per month
С комфортом до Бетельгейзе

Штурман

$5.9 per month
Штурмуем геймдев - Пошаговые уроки с нуля до профи
Учимся создавать игры на Renpy
Программируем на Python
Go up