【问题标题】:How to pass a String from a SWF into another SWF如何将字符串从 SWF 传递到另一个 SWF
【发布时间】:2011-10-19 11:44:42
【问题描述】:

希望这是一个足够简单的问题:)

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

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

请帮忙!

【问题讨论】:

    标签: string flash actionscript-3 loader


    【解决方案1】:

    让我们澄清一下: 1.加载器swf,我们将调用父级。 2.父加载的swf我们称之为子。

    子项包含一个字符串,并且您希望父项能够读取该字符串> 所以... Child 必须为字符串定义一个公共变量。 (这意味着你必须为它使用一个 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']);
        }
    
    }
    

    }

    输出将是: 父初始化 童装 童装 这是子值

    【讨论】:

    • 谢谢!那行得通 :) 现在只需要说服客户进行一些更新...
    【解决方案2】:

    您可以从加载的 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);
    }
    

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

    【讨论】:

    • 嗯,我有一个 null 错误,但会继续努力让它也能正常工作
    猜你喜欢
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多