Actionscript 3 将数据从父swf传递到子swf

Actionscript 3 将数据从父swf传递到子swf,actionscript-3,Actionscript 3,我有两个swf,A.swf和B.swf:B.swf是A.swf的孩子。每个swf都有自己的DocumentClass。现在:我必须将4个数组从A.swf传递到B.swf的DocumentClass。哪种可能是最好的方式?B.swf中的听众是个好主意吗?我注意到可以通过querystring发送数据,但如果可能,我希望避免使用此解决方案。EventListeners解决方案 您有一些GlobalEventListener(),它在A.swf和B.swf中都使用 您有一个customEvent,它扩

我有两个swf,A.swf和B.swf:B.swf是A.swf的孩子。每个swf都有自己的DocumentClass。现在:我必须将4个数组从A.swf传递到B.swf的DocumentClass。哪种可能是最好的方式?B.swf中的听众是个好主意吗?我注意到可以通过querystring发送数据,但如果可能,我希望避免使用此解决方案。

EventListeners解决方案

您有一些GlobalEventListener(),它在A.swf和B.swf中都使用

您有一个customEvent,它扩展了事件并可以发送数组

package com 
{
import flash.events.Event;

public class TransferrArray extends Event 
{
    public static const TRANSFERRING:String = 'transferring';
    private var _array:Array;

    public function TransferrArray(type:String, array:Array, bubbles:Boolean=false, cancelable:Boolean=false) 
    {
        super(type, bubbles, cancelable);

        _array = array;         
    }

    public function get array ():Array
    {
        return _array;
    }       
}
}

在B.swf中,您将:

GlobalEventListener.addEventListener ( TransferrArray.TRANSFERRING, handleTransfer )
private function handleTransfer ( e : TransferrArray) : void
{
    e.array // <- do what you need with it
}
直接解析

B.swf需要(B.swf的主要类别)一些:

在A.swf中,加载B.swf并准备好传输阵列后:

GlobalEventListener.dispatchEvent ( new TransferrArray ( TransferrArray.TRANSFERRING, [your,arrays,needed,for,b] );
BSWFLoader.content["transferrArrays"] ( [your,arrays,needed,for,b] );

我不建议开始走单身人士的道路。你迟早会后悔的。(http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/)

相反,让您的子swf的基类实现一个接口,该接口具有一个变量,该变量对应于您要在其上设置的值。加载程序分派完完整事件后,将swf转换到该接口,并简单地将变量设置为正常值

看看这里的例子。这是一个Flex示例,但是如果您单击缩略图,然后右键单击电影并选择“查看源代码”,您将看到源代码。实现Blusher接口的Flash电影的源位于flashSrc文件夹中

HTH


Amy

我不知道DocumentClass可以实现接口:我以为我只能扩展MovieClip或Sprite。任何类都可以实现接口:-)。查看示例代码。由于技术相当先进,我不确定我是否理解。每个swf都实现Blusher,因此任何swf都必须具有该变量。在swf加载时(在您的例子中是库符号),您将主swf的子项投射到Blusher。然后从main访问其内部变量isBlushing并设置其值。这样行吗?对。当一个类实现一个接口时,它会说“我保证有这些方法。”不幸的是,在接口中不能有一个普通的变量,但可以使用getter/setter对,它的作用与变量相同。加载swf后,主swf将能够像var blusher:blusher=loader.content as blusher这样说。if(blusher!=null){blusher.isBlushing=true;}我总是检查null,因为如果不是blusher,“is”会给你一个null。这只是在加载错误的swf时的故障保护。请注意,主swf的类不需要实现Blusher,只需要将正在加载的swf强制转换为Blusher(这将是您在ActionScript设置的文档类框中输入的类)。在我的例子中,Blusher Flash文件的子文件也可以被转换为Blusher,但是如果我是你,我会忽略这一部分。重要的部分是主文档类(BlushingSwf.as)实现了Blusher,因此加载的MovieClip本身可以转换为Blusher。希望这能澄清。Jevgenij,我不明白GlobalEventListener实际上是什么,什么是dispatchEventListener方法(这是dispatchEvent的一个拼写错误?)…嘿,thanx for comment->fixed to dispatchEvent。和GlobalEventListener ir您的singletone类,在连接eventDispatcher和eventListener的最后,如果它们在不同的swf中,或者它们可能在应用程序中的不同movieclips级别上。Jevgenij,您能给我提供一个GlobalEventListener类的小示例吗?只要你有足够的时间,我不想让你厌烦。这只是我选择的班级的名字。该类有一个变量eventDispatcher。通过这一次,所有的事件解析都在进行。好的,对不起,我在过去的14个小时里一直在编程,我想是时候停止了。:-)非常感谢。
BSWFLoader.content["transferrArrays"] ( [your,arrays,needed,for,b] );