2016-08-29 4 views
0

У меня есть переменный «уровень», и на основе значения этой переменной Number я хочу, чтобы файл был включен с настройками уровня для данного уровня. Файлы уровней называются «Level1Definition.as», «Level2Definition.as», «Level3Definition.as» и т. Д. Когда я пытаюсь сформировать эту строку кода, как это:В скрипте действий 3, как я могу динамически включать файл с определенным именем на основе значения другой переменной?

include "Level" + level + "Definition.as"; 

, я получаю сообщение об ошибке:

Expecting semicolon before plus. 

Как я могу включить файл имя (имя файла), которого формируется с помощью переменной , во время выполнения?

+0

@WillTower Вопрос Как включить файл, имя которого (имя файла) формируется с использованием переменной? (Я редактировал оригинальный вопрос, хотя в заголовке вопроса очень ясно). –

+0

Я хочу, чтобы в файл включался другой файл (точка времени, так, в основном, момент) в игре. Цель состоит в том, что я хочу генерировать уровни на основе этих отдельных файлов. Поэтому я хочу включить их в другой момент игры. Так что этот момент никогда не во время компиляции, если вы думаете об этом. –

ответ

1

В ActionScript вы можете определить интерфейс, который по существу говорит «это методы и свойства, которые всегда будут иметь этот тип объекта». Интерфейсы отлично подходят для создания действительно гибких реализаций без кода, который использует реализации, которые должны знать о внутренних компонентах. Одно из преимуществ, заключающееся в том, что вам не нужно знать о внутренних компонентах, является то, что это знание не нужно компилировать в вызывающий код.

Если для вашего приложения имеет смысл загружать код, который скомпилирован, использование интерфейсов действительно освобождает вас от необходимости делать то, что вы хотите в реализации, и иметь столько, сколько вам нужно по дороге. Here's an answer where I talk more about this.

2

Это не работает, потому что оператор include выполняется до/во время компиляции, но значение переменной определяется во время выполнения.

Ядро вашей проблемы состоит в том, что вы смешиваете данные с логикой. У вас не должно быть разных классов для отдельных уровней. Вместо этого создайте один класс уровня, представляющий объект общего уровня. Создавайте экземпляры этого класса и передавайте данные, относящиеся к этому уровню, к этому уровню. Эти данные обычно загружаются во время выполнения из файла или сервера, затем десериализуются (из json, XML или любого другого формата) до его использования. Жесткое кодирование больших объемов данных, как вы это делаете, если не рекомендуется. Это также делает необходимым перекомпилировать все, когда уровень изменяется.

+1

Вы также можете сделать это, используя различные уровни реализации интерфейса и скомпилируйте каждый в swf, который вы загружаете во время выполнения. –

+0

@Amy Blankenship, почему бы не опубликовать это как ответ? Если уровни существенно отличаются по функциональности, это может быть лучшим решением. – null