Изображения (ВН спрайты) - TrueCat17/Ren-Engine GitHub Wiki

Регистрация

Объявлять изображения можно только в init-блоке. Делается это так:

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.


Сохранение свойств

При показе нового спрайта он копирует свойства старого (позиция, размер, масштаб, поворот...).
Т. е. в примере ниже спрайт np normal будет отображаться в позиции left:

show np smile at left
pause
show np normal

Сохранение анимации

По аналогии с предыдущим абзацем, копируется также анимация show_at (см. статью ATL (анимации и трансформации) ):

show np smile at left:
	linear 7.5 xpos 0.72
pause
show np normal with dspr

В этом примере спрайт будет показан слева, после чего он начнёт перемещение вправо за 7.5 сек.
Если пауза будет прекращена до конца перемещения, то спрайт np smile будет замещён спрайтом np normal, который продолжит движение так, будто никакой замены не было.


На втором плане

Указать положение за каким-либо персонажем позволяет 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 # просто убрать всё
scene with dissolve # скрыть каждый спрайт с эффектом dissolve (одновременно, конечно, а не по очереди)

Авто-масштабирование

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

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
	
	image rn happy = 'images/sprites/rn/happy.png'

Здесь вам требуется заменить 1200, 675 на размеры своего "стандартного экрана", к примеру, на 1920, 1080.

Спрайты с явно указанными размерами тоже будут отмасштабированы.


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

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