Книга-Игра – Создай Свою Игру!

 
Во всех бочках затычка

Разработчикам игр на Atril
Часть 3: Вызов скриптов

Актуально для: Atril 2.1

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

Вариант самый простой – "напрямую" – из текста другого скрипта.
Вызвать скрипт, можно просто по имени, если этот скрипт определён в этом же параграфе или он является глобальным. Напомню, что скрипт "существует" только в то время, когда активным параграфом (в игровой момент времени) является тот параграф, в котором определён скрипт.
Иллюстрация вызова скрипта из другого:

Нюансы "существования" скриптов отображены на схеме:

В верхнем примере видно, что в зависимости от пути к цели, "глобальный" скрипт может существовать, а может и не существовать. В нижней схеме приведён вариант решения данной проблемы.

Передача параметров в скрипт вызываемый напрямую
В случае, когда скрипт вызывается из другого скрипта, для передачи параметров необходимо использовать передачу объекта в форме нотации json, он-же – ассоциативный массив:

Т.е. в вызываемом скрипте существует объект arg всегда содержащий параметры, переданные в скрипт при вызове. С форматом описания передаваемого объекта можно познакомиться здесь.

Здесь кроется специфика того, что скрипт не является в чистом виде функцией (объектом) языка JavaScript. Так, в скрипте можно создать свою функцию, которую вызвать как обычную согласно синтаксису языка:

Вызов скриптов из условий
В предыдущей части у блоков упоминались дополнительные параметры-условия "if" и "ifnot". Для вызова скрипта из них, необходимо указать название скрипта, а в случае если необходимо передать параметры, добавить "?" и перечислить параметры, например:

Проверка передаваемых в скрипт значений
Для проверки передаваемых в скрипт параметров необходимо описывать специальные функции проверки, проверяющие наличие и тип значения. Это необходимо исключительно для уменьшения вероятности возникновения ошибок после публикации игры.
Например, в "шерлоке холмсе" используется вот такие два специальных скрипта, проверяющих передаваемые значения:

Пример вызова проверки:

Код скриптов:

checkStringArg
var val = $.trim(arg.value);
if (val = '' || val ‘undefined’){
if (arg.def == undefined){
triggerError(‘Параметр не указан’, {value: val, env: env});
}
return arg.def;
}
return arg.value;

checkIntArg
if (isNaN(arg.value)){
if (arg.def == undefined){
triggerError(‘Параметр не является числом’, {value: arg.value, env: env});
return;
}
return arg.def;
}
return parseInt(arg.value);