#flash #actionscript-3
#flash #actionscript-3
Вопрос:
Возможно ли это? Если да, то как?
В противном случае, какие альтернативы?
Под динамически я подразумеваю использование
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, finishLoading);
loader.load(new URLRequest("MySWF.swf"));
Комментарии:
1. Не могли бы вы немного уточнить свой вопрос? Уточните, что вы имеете в виду под словом «динамически». Вы говорите о заводском методе или о чем-то совершенно другом?
2. смотрите мое обновление, я имею в виду использование загрузчика
3. Ах. Вы специально пытаетесь загрузить SWF-файл и задать его параметры? SWF-файл не является объектом класса, поэтому у него не должно быть «конструктора» как такового.
Ответ №1:
SWF-файл сам по себе не является классом, скорее это коллекция классов и других вещей (например, изображений или аудиобайтов), архивированных и готовых к использованию. У вас не может быть конструктора для SWF. Однако, что вы можете сделать, это загрузить SWF-файл, а затем, после завершения загрузки, вы можете создать экземпляр класса из этого SWF-файла и передать конструктору любые аргументы, которые вы хотите.
Также можно отправить параметры в SWF, а затем обработать их как flashvars внутри swf, но это, конечно, не конструктор 🙂
loader.load(new URLRequest("MySWF.swf?day=tueamp;week=3"));
И тогда вы можете получить их следующим образом:
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
trace(paramObj.day);
trace(paramObj.week);
Комментарии:
1. Спасибо, как «создать экземпляр класса из этого SWF-файла и передать любые аргументы, которые вы хотите, его конструктору»
2. ну, допустим, у вас есть класс ‘Train’ в этом SWF-файле, после загрузки swf-файла этот класс становится доступным, как и любой другой класс, поэтому вы можете просто выполнить
new Train(power)
where power — это переменная, которую вам нужно передать вTrain
конструктор. Однако, если вам нужно передать переменные для всего SWF-файла, я думаю, второй вариант был бы лучше.3. но что такое Train, так это код, стоящий за fla. Если я создам новый экземпляр Train, передавая, например, цвет ФОНА, будет ли swf-ФОН отражать этот цвет?
4. Обучите этот класс в этом SWF-файле, как и любой другой класс, после создания его экземпляра вы можете использовать его (например, добавить в дочерний список). Однако, если вы хотите изменить цвет экземпляра внутри SWF (например, экземпляра background), вы просто:
loader.content.background.setColor(0xCCCCCC);
Где loader — это ваш класс Loader, а background — это класс с пользовательским методом setColor, реализованным самостоятельно.
Ответ №2:
Если у вас есть класс document в вашем SWF, то вместо использования параметров в конструкторе создайте общедоступный метод инициализации с вашими параметрами или даже используйте методы получения и установки:
import flash.display.MovieClip;
public class MySWF extends MovieClip
{
private var _var1 :String;
private var _var2 :int;
public function MySWF():void
{
}
public function init(var1:String):void
{
_var1 = var1;
}
public function get var2():int
{
return _var2;
}
public function set var2(value:int):void
{
_var2 = value;
}
}
Затем вы можете вызвать их после загрузки вашего swf-файла следующим образом:
private function finishLoading(event:Event):void
{
var mySWF:MySWF = event.target.content as MySWF;
addChild(mySWF);
mySWF.init("This is a string");
mySWF.var2 = 5;
{
Комментарии:
1. Спасибо, если это невозможно с помощью constructor, я сделаю это, но я предпочитаю constructor.