Что вы узнаете#
Вы напишете небольшую программу на BASIC, увидите, что Scene Graph остаётся пустым, хотя программа явно работает, а затем заставите каждый объект появиться, присвоив ему имя. К концу вы поймёте, почему дерево скрывает большую часть того, что строит программа, и как выбирать, что оно показывает.
Перед началом#
- Engine является платным модулем. Бесплатны только три модуля: Inkwell, Vectra и PDF Studio.
- Предыдущий туториал не требуется. Всё ниже умещается в одном скрипте.
- Держите панель Scene Graph открытой рядом с областью просмотра. В этом и заключается смысл упражнения.
Шаги#
-
Откройте Engine, начните с пустой сцены и откройте редактор скриптов. Вставьте это и нажмите Play:
image = LoadImage("hero.png") sprite = CreateSprite(image) SpritePosition(sprite, 100.0, 120.0) CreatePointLight(1, 0.0, 5.0, 0.0, 10.0, 255, 255, 255) DO Sync() LOOP -
Посмотрите на Scene Graph. Спрайт на экране, свет горит, а дерево не показывает ничего. Это не ошибка, и в этом весь урок.
Совет: панель показывает количество безымянных объектов. Это число отражает результат работы вашей программы, который дерево намеренно не внесло в список.
-
Присвойте имя спрайту. Добавьте одну строку после
SpritePositionи снова нажмите Play:SpriteName(sprite, "игрок")игрокпоявляется в дереве. На экране больше ничего не изменилось: присвоение имени ничего не создаёт, не перемещает и не рисует. Оно публикует. -
Присвойте имя и свету, с помощью команды, которая пришла вместе с этой идеей:
LightName(1, "солнце")Теперь две записи. Щёлкните по одной: инспектор реагирует точно так же, как для объекта, размещённого вручную.
-
Добавьте частицы и присвойте им имя, чтобы увидеть, что правило касается не только спрайтов:
CreateParticles(1, 200.0, 200.0) ParticlesName(1, "дым") -
Теперь удалите три строки с именами и нажмите Play. Сцена идентична, дерево снова пусто, а счётчик безымянных объектов снова показывает три.
Внимание: имя не является id.
SpriteName(sprite, "игрок")помечает спрайт, чей id хранится в переменнойsprite; это не позволяет найти его позже по этому имени. Именно id остаётся вашим средством доступа к нему.
Результат#
Вы решаете, что показывает ваша программа. Prop, свет и эмиттер появляются под именами, которые вы выбрали; сотни технических объектов, которые строит настоящая программа, остаются в стороне.
Почему существует это правило#
Классическая программа на BASIC постоянно создаёт объекты: спрайт на каждый выстрел, текст на каждую цифру счёта, изображение на каждый тайл. Перечисление всех их сделало бы Scene Graph нечитаемым за несколько секунд, а три объекта, которые вас на самом деле интересуют, потерялись бы в этом шуме.
Поэтому дерево не показывает всё и не скрывает остальное наугад. Оно показывает то, чему вы присвоили имя, и считает остальное, чтобы ничего не исчезало незаметно. Этот фильтр принадлежит вам, а не движку.
Какие объекты можно называть#
| Команда | Что она называет |
|---|---|
SpriteName(id, name) | Спрайт |
TextName(id, name) | Текстовый объект |
ObjectName(id, name) | 3D-объект |
LightName(id, name) | Точечный или направленный свет |
ParticlesName(id, name) | Эмиттер частиц, 2D или 3D |
Звуки, изображения, memblocks и шрифты не имеют строки в Scene Graph: это ресурсы, а не объекты сцены, и присвоение им имени нигде ничего не показало бы.
Что дальше#
- Остальная часть диалекта: язык BASIC.
- Каждая команда присвоения имени со своими параметрами: семейство Studio.