AS3: динамический доступ к объектам библиотеки - PullRequest
0 голосов
/ 16 марта 2012

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

В основном, мой массив содержит кучу букв ..

var monarray:Array =("AAACBCBCAABBC").split("");

Теперь в моей библиотеке три клипа. У них есть следующая связь AS3: Монстера monsterB monsterC

То, что я хочу сделать, - это создать новый экземпляр объекта, основываясь на том, где я нахожусь в массиве. Например, когда monarray имеет индекс [0], я хочу добавить monsterA ..

Это код, который я использую для достижения этого эффекта:

var b = new monster[monarray[i]];
b.x = mouseX;
b.y = mouseY;
addChild(b);
i ++;

Однако, после компиляции моего .swf, я получаю эту ошибку:

Scene 1, Layer 'Layer 1', Frame 1, Line 9   1086: Syntax error: expecting semicolon before leftbracket.

Я понимаю, что это потому, что я, очевидно, делаю это неправильно, но я когда-либо использовал массивы только для вызова специально индексированного экземпляра.

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

Заранее большое спасибо!

Гарри.

Ответы [ 2 ]

1 голос
/ 16 марта 2012

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

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

У вас есть base.swf, который загружает external.swf (который содержит определения для упомянутых вами монстров!). base.swf уже развернут, и вы не хотите вносить в него изменения, тогда вышеуказанный метод достаточно хорош.

Предположим, вы уже знаете, какие типы монстров вы собираетесь развернуть во время выполнения (что имеет место в большинстве игр!). Я бы предложил вам создать фабричный класс, использовать наследование (создайте интерфейс IMonster! ) и фабричный класс может использовать ваши A, B, C и т. д. в качестве входных данных для запуска новых монстров.

0 голосов
/ 16 марта 2012

не уверен, попробуйте:

var mst = getDefinitionByName("monster"+monarray[i]) as Class;
var b = new mst;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...