Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 使用不同于默认值的其他swf打开swf文件_Flash_Actionscript 2 - Fatal编程技术网

Flash 使用不同于默认值的其他swf打开swf文件

Flash 使用不同于默认值的其他swf打开swf文件,flash,actionscript-2,Flash,Actionscript 2,希望这不会被认为是问同一个问题两次 所以我正在开发一个Flash网站(在AS2中),它有一个外部索引swf,它使用loadMovie(“subfo1.swf”,placetoshowwf)加载子swf文件。它们依次加载一个xml文件,该文件告诉它要加载什么内容。一切都很顺利,但我们想在索引swf中添加一个按钮,用于打开一个子swf文件,其中包含一个或两个变量的一个或两个不同值 不幸的是,只需添加一个按钮 loadMovie("foo1.swf", placeToShowSwf); placeTo

希望这不会被认为是问同一个问题两次

所以我正在开发一个Flash网站(在AS2中),它有一个外部索引swf,它使用
loadMovie(“subfo1.swf”,placetoshowwf)
加载子swf文件。它们依次加载一个xml文件,该文件告诉它要加载什么内容。一切都很顺利,但我们想在索引swf中添加一个按钮,用于打开一个子swf文件,其中包含一个或两个变量的一个或两个不同值

不幸的是,只需添加一个按钮

loadMovie("foo1.swf", placeToShowSwf);
placeToShowSwf.openProject(x);
不起作用,我假设是因为对未完全加载的文件调用了
openProject(x)
。我知道代码没有问题,因为我在别处做了一个按钮,只调用
placetoshowwf.openProject(x)
,没有任何问题

我看到了两种解决方案,我都不知道该怎么做

  • 创建swf文件时更改所需的值,如类的构造函数。但是swf文件是否有某种构造函数呢?只要说
    loadMovie(newfoo1.swf(x),placetoshowwf)
    或类似的东西就好了
  • 等待swf(可能还有xml)加载之后,然后调用
    placetoshowwwf.openProject(x)

    有人对这两种解决方案中的任何一种都有任何指导,或者是我豌豆般的大脑无法理解的其他方式吗?

    第二点是你应该做的。不幸的是,你仍然停留在ActionScript1的土地上,而ActionScript3已经推出了几年了。因此,我不知道确切的语法(我自己从ActionScript2上的flash开始),但是#2(等待SWF完成加载,然后告诉它做什么)是我要做的


    如果您不介意学习一点AS2(您通常可以在没有太多问题的情况下混合AS1和AS2),那么您应该看看MovieClipLoader。它提供回调,告诉您子SWF何时完成加载。

    三种简单的方法:

    (1) -反转命令的方向。也就是说,在父SWF中,您有:

    projectType = "x";
    loadMovie("foo1.swf", placeToShowSwf);
    
    子(加载的)SWF具有以下特性:

    openProject( _parent.projectType );
    
    你明白了。如果子SWF是从不同的服务器加载的,这将不起作用,除非您解决跨域脚本问题

    (2) -等待MC加载。不幸的是,AS2没有可供使用的内置加载事件,因此常用的方法是使用如下所示的OneInterFrame:

    someMovieClip.onEnterFrame = function() {
        if ( path_to.placeToShowSwf.openProject ) {
            path_to.placeToShowSwf.openProject(x);
            this.onEnterFrame = null;
        }
    }
    
    如果您希望在方法可用时立即调用该方法,则可以这样做;如果要等待子swf完全加载,则需要检查子swf的
    getBytesLoaded()
    getByTestTotal()
    方法


    (3) 使用像MovieClipLoader这样的组件进行加载-只需跟随即可。从表面上看,这类似于(2),但细节隐藏在MovieClipLoader类中。

    fenomas的回答相当不错,但也有一个不太“黑”的答案 如果使用AS2,请使用MovieClipLoader类加载SWF。 它有您可以监听的事件,您将对onLoadInit感兴趣 事件虽然人们可能会凭直觉认为它是在加载过程中被触发的 是初始化的,应该使用onLoadComplete,但事实并非如此

    当所有字节完成下载时,将触发onLoadComplete 当所有字节完成下载并且类 在已加载的swf中进行初始化(因此您可以访问已加载的swf的 方法和属性)

    请查看as2.0文档中MovieClipLoader>onLoadInit中的代码示例


    祝您好运

    您所采用的方法是正确的,只是您需要等待onLoadInit回调,然后才能尝试访问您的子电影剪辑