Изображения (ВН спрайты) - TrueCat17/Ren-Engine GitHub Wiki
Объявлять изображения можно в любой момент (главное - до их использования): и в init
-блоке, и в label
-секции.
Делается это так:
image np smile = "images/sprites/np/np_smile.png"
image np normal = "images/sprites/np/np_normal.png"
Путь к изображениям задаётся относительно директории resources.
Если определить изображение 2 раза (например, np smile
), то при повторном определении старое изображение будет замещено новым.
Отобразить изображение на экране можно командой show
:
show np smile
Стоит обратить внимание на то, что если мы сейчас сделаем:
show np normal
То первое изображение пропадёт.
Скрытие предыдущего изображения из абзаца выше происходит из-за того, что они имеют один и тот же псевдоним.
Псевдоним указывается параметром as
после имени изображения:
show np normal as np1
В случае же, когда мы не указываем его вручную, он автоматически приравнивается первому слову в имени изображения (в данном случае np
).
Т. е. когда мы отображаем np normal
, изображение получает такой же псевдоним (np
), как и np smile
, поэтому np smile
и убирается со сцены в примере из прошлого абзаца.
Кроме as
есть и другие параметры.
at
указывает местоположение на экране, например:
-
show np smile at left
- слева -
show np smile at center
- по центру -
show np normal at fright
- справа, близко к краю
Допустимы следующие значения (слева направо): fleft, left, cleft, center, cright, right, fright
(по умолчанию используется center
).
На самом деле, это специальные объекты, причём указание места - лишь часть их функционала.
Они также отвечают и за анимации с трансформациями.
О том, как создавать свои объекты такого типа, рассказывается в главе про
ATL.
Указать положение за каким-либо персонажем позволяет behind
.
Допустим, у нас есть какой-то персонаж sp
, и мы его отображаем так:
show sp normal at cright
Тогда при выполнении следующей команды персонаж np
будет спереди sp
:
show np normal at right
А если мы хотим поместить его позади, то следует использовать behind
:
show np normal at right behind sp
Нужно отметить, что sp
здесь является псевдонимом.
Т. е. если бы на пару строк выше sp
был бы показан с использованием as sp1
, то и сейчас мы должны были бы написать behind sp1
.
with
указывает эффект, с которым отображается изображение (затемнение, появление и т. д.).
Для эффектов выделена
отдельная глава,
так что детали ищите там.
hide np
Здесь np
- тоже псевдоним.
Показ сцены убирает все объекты и показывает изображение нужной сцены. Примеры:
scene bg black
scene cg my_room
scene # просто убрать всё
Без указания размеров спрайт будет иметь размеры оригинального изображения при любых разрешениях экрана, что нехорошо.
image np smile = "images/sprites/np/np_smile.png"
То же самое произойдёт и при указании абсолютных размеров:
image np smile = "images/sprites/np/np_smile.png":
size (400, 600)
Ситуация будет лучше при указании относительных размеров (относительно размера окна):
image np smile = "images/sprites/np/np_smile.png":
size (0.3, 0.889) # 400 / 1200, 600 / 675
Проблема же, однако, в том, что разные спрайты могут иметь разные размеры.
Решения:
- Добавить пустые места в изображениях (слева, справа и сверху) и поставить один и тот же относительный размер в default_decl_at - лишнее расходование многих ресурсов, иногда довольно значительное.
- Указывать разные относительные размеры для каждого спрайта - муторно, долго, используемые числа не очевидны, ошибки незаметны.
Авто-мастштабирование позволяет избавиться от всех этих недостатков.
Достаточно лишь указать размеры экрана, для которого предназначены спрайты,
и во время игры их размеры будут автоматически изменены так, чтобы
отношение оригинальных размеров к указанным размерам окна были такими же как
отношения новых, вычисленных размеров к текущим размерам окна.
Указание размеров экрана, для которого предназначены спрайты, в новом проекте по умолчанию такое:
init -1000:
# only for scaling sprites!
$ config.width, config.height = 1200, 675
$ default_decl_at = []
image rn happy = 'images/sprites/rn/happy.png'
Здесь вам требуется заменить 1200, 675
на размеры своего "стандартного экрана", к примеру, на 1920, 1080
.
Хотя изображения с явно указанными размерами тоже будут отмасштабированы,
обычно всё-таки нет никакой нужды эти размеры указывать, и потому дефолтную трансформацию (default_decl_at
)
обычно имеет смысл держать пустой.
P. S. Т. к. config
- на самом деле часть persistent
-объекта (который сохраняет свойства между запусками), то
для отключения авто-масштабирования следует установить указанные свойства в None
,
а не просто удалить или закомментировать установку числовых значений.