Как передать строку из SWF в другой SWF - PullRequest
1 голос
/ 04 августа 2011

в надежде, что это достаточно простой вопрос:)

Некоторые детали: Я использую Flash CS5, никогда не трогал Flex. Также SWF, который выполняет загрузку, будет клиентом SWF, так что надеемся на решение, которое могло бы работать с простой парой строк.

В основном внутри SWF, над которым я работаю, содержится простая строка:

var theString = "theString";
trace("theString = "+theString);

Сейчас я работаю над тестовым загрузчиком SWF, который загрузит мой String SWF и получит переменную самым простым способом. Какие-нибудь мысли? Ниже мой текущий сломанный код:

function loaderComplete(event:Event)
    {
        trace("... in loaderComplete");

        getString = loader.content.toString();

        trace("loader.content = "+loader.content);
        trace("... getString    = "+getString);
    }

Это мое окно вывода:

theString = theString
... in loaderComplete
loader.content = [object MainTimeline]
... getString  = [object MainTimeline]

Я искал в стеке и нашел похожие вопросы, но ни один из них не является тем, что мне нужно:

отслеживание видеофайлов - встраивание flv в swf

^ В основном то, что я пытаюсь сделать, пока нет ответов

для передачи переменной от одного SWF другому SWF в as3

^ звучало так же, как моя проблема, но ответом был пример приложения Flex

передавать значения var от одного SWF другому SWF, который загружается внутри первого в AS3

^ Это было близко, но я не уверен, как реализовать выбранный ответ, также кажется немного сложнее, чем мне нужно

Пожалуйста, помогите!

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

Давайте уточним немного: 1. Загрузчик swf, назовем родительским.2. SWF, загруженный родителем, мы будем называть дочерним.

Дочерний объект содержит строку, и вы хотите, чтобы родительский элемент мог читать эту строку> Итак ... Дочерний объект должен определить публичную переменнуюдля строки.(Это означает, что вы должны использовать файл Class для него, поскольку вы не можете объявить свойство общедоступным на временной шкале.)

Наконец, родительский объект попытается получить это свойство.Вы можете захотеть обернуть это в try / catch для обработки случаев, когда строка не будет присутствовать.

Вот пример дочернего класса.

package  
{
import flash.display.Sprite;

/**
 * ...
 * @author Zach Foley
 */
public class Child extends Sprite 
{
    public var value:String = "This is the child Value";
    public function Child() 
    {
        trace("Child Loaded");
    }

}

}

А вот родительский класс загрузчика:

 package  
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;

/**
 * ...
 * @author Zach Foley
 */
public class Parent extends Sprite 
{
    private var loader:Loader;

    public function Parent() 
    {
        trace("PArent Init");
        loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
        loader.load(new URLRequest("child.swf"));
    }

    private function onLoaded(e:Event):void 
    {
        trace("Child Loaded");
        trace(loader.content['value']);
    }

}

}

Вывод будет: PArent Init Child Loaded ChildLoaded Это дочернее значение

0 голосов
/ 04 августа 2011

вы можете получить доступ к переменным и коду из загруженного SWF.Во-первых, убедитесь, что и загрузчик, и загруженный контент используют один и тот же AVM, это означает, что оба проекта используют одну и ту же версию языка (оба as3 или оба as2)

Спасибо в обработчике завершения загрузчика:

loaderComplete(evt:Event):void{
    var mc:MovieClip = loader.content as MovieClip;
    if(!mc){
        trace("Error loading");
        return;
    }
    trace("Your string: " + mc.theString);
}

Я не тестировал этот код, но он должен работать

...