All tutorials

Называйте то, что создаёт ваша программа

Beginner 10 min engine

Программа может создать сотню объектов и не показать ни одного из них в Scene Graph. Присвоение имени заставляет один объект появиться, и это работает со спрайтами, текстом, 3D-объектами, светом и частицами.

Что вы узнаете#

Вы напишете небольшую программу на BASIC, увидите, что Scene Graph остаётся пустым, хотя программа явно работает, а затем заставите каждый объект появиться, присвоив ему имя. К концу вы поймёте, почему дерево скрывает большую часть того, что строит программа, и как выбирать, что оно показывает.

Перед началом#

  • Engine является платным модулем. Бесплатны только три модуля: Inkwell, Vectra и PDF Studio.
  • Предыдущий туториал не требуется. Всё ниже умещается в одном скрипте.
  • Держите панель Scene Graph открытой рядом с областью просмотра. В этом и заключается смысл упражнения.

Шаги#

  1. Откройте 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
    
  2. Посмотрите на Scene Graph. Спрайт на экране, свет горит, а дерево не показывает ничего. Это не ошибка, и в этом весь урок.

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

  3. Присвойте имя спрайту. Добавьте одну строку после SpritePosition и снова нажмите Play:

    SpriteName(sprite, "игрок")
    

    игрок появляется в дереве. На экране больше ничего не изменилось: присвоение имени ничего не создаёт, не перемещает и не рисует. Оно публикует.

  4. Присвойте имя и свету, с помощью команды, которая пришла вместе с этой идеей:

    LightName(1, "солнце")
    

    Теперь две записи. Щёлкните по одной: инспектор реагирует точно так же, как для объекта, размещённого вручную.

  5. Добавьте частицы и присвойте им имя, чтобы увидеть, что правило касается не только спрайтов:

    CreateParticles(1, 200.0, 200.0)
    ParticlesName(1, "дым")
    
  6. Теперь удалите три строки с именами и нажмите 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: это ресурсы, а не объекты сцены, и присвоение им имени нигде ничего не показало бы.

Что дальше#