Изображения (ВН спрайты) - 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

Проблема же, однако, в том, что разные спрайты могут иметь разные размеры.

Решения:

  1. Добавить пустые места в изображениях (слева, справа и сверху) и поставить один и тот же относительный размер в default_decl_at - лишнее расходование многих ресурсов, иногда довольно значительное.
  2. Указывать разные относительные размеры для каждого спрайта - муторно, долго, используемые числа не очевидны, ошибки незаметны.

Авто-мастштабирование позволяет избавиться от всех этих недостатков.
Достаточно лишь указать размеры экрана, для которого предназначены спрайты, и во время игры их размеры будут автоматически изменены так, чтобы отношение оригинальных размеров к указанным размерам окна были такими же как отношения новых, вычисленных размеров к текущим размерам окна.

Указание размеров экрана, для которого предназначены спрайты, в новом проекте по умолчанию такое:

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, а не просто удалить или закомментировать установку числовых значений.


Далее ->
<- Назад

⚠️ **GitHub.com Fallback** ⚠️