Как передать аргументы конструктору, если объект динамически загружается с помощью загрузчика во flash?

#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.