如何将字符串从SWF传递到另一个SWF

时间:2011-08-03 21:15:23

标签: string flash actionscript-3 loader

希望这是一个很容易的问题:)

一些细节: 我使用的是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]

我在Stack上搜索并发现了类似的问题,但没有一个是我需要的:

tracking video files - embedding flv to swf

^基本上我正在尝试做什么,还没有答案

to pass variable from one swf to another swf in as3

^听起来就像我的问题,但答案是一个Flex应用程序示例

pass var values from one swf to another swf who is loaded inside the firts one in AS3

^这很接近,但我不确定如何实施所选择的答案,似乎也比我需要的更复杂

请帮忙!

2 个答案:

答案 0 :(得分:2)

让我们澄清一下:  1.加载器swf,我们将调用父进程。  2.父母加载的瑞士法郎我们会给孩子打电话。

Child包含一个字符串,您希望父级能够读取该字符串> 所以... Child必须为字符串定义一个公共变量。 (这意味着你必须为它使用一个Class文件,因为你不能在时间轴上公开一个属性。)

最后,家长会尝试获取该属性。您可能希望将其包装在try / catch中以处理不存在字符串的情况。

以下是Child Class的示例。

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 孩子加载 孩子加载 这是子值

答案 1 :(得分:0)

您可以从加载的swf访问变量和代码。首先,确保加载器和加载的内容都使用相同的AVM,这意味着两个项目都使用相同版本的语言(as3或as as2)

感谢loader complete handler:

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

我没有测试过这段代码,但它应该可行