Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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

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
Loops 如何循环加载SWF文件的顺序?_Loops_Flash_Load_Sequence - Fatal编程技术网

Loops 如何循环加载SWF文件的顺序?

Loops 如何循环加载SWF文件的顺序?,loops,flash,load,sequence,Loops,Flash,Load,Sequence,准备好了这里是:我们有一个简单但有用的代码,可以按顺序加载2个swf文件 但如何循环它? swf2完成后,如何更改代码以加载swf1 我几乎试了一整天,但是没有结果。。。请帮助…即使您有评论任何想法都非常感谢 非常感谢 代码如下: 你需要一种面向对象的方法 首先,创建一个完全处理一个外部SWF的类:加载、播放、发出播放结束的信号、卸载和清理 package { // Imports. import flash.events.Event; import flash.net

准备好了这里是:我们有一个简单但有用的代码,可以按顺序加载2个swf文件

但如何循环它?

swf2完成后,如何更改代码以加载swf1

我几乎试了一整天,但是没有结果。。。请帮助…即使您有评论任何想法都非常感谢

非常感谢

代码如下:


你需要一种面向对象的方法

首先,创建一个完全处理一个外部SWF的类:加载、播放、发出播放结束的信号、卸载和清理

package
{
    // Imports.
    import flash.events.Event;

    import flash.net.URLRequest;

    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.display.MovieClip;

    public class ExternalMovie extends Sprite
    {
        private var L:Loader;
        private var M:MovieClip;

        // Handles loading.
        public function loadAndPlay(url:String):void
        {
            L = new Loader;
            addChild(L);

            L.contentLoaderInfo.addEventListener(Event.INIT, onLoaded);
            L.load(new URLRequest(url));
        }

        // Handles Loader.contentLoaderInfo event Event.INIT.
        private function onLoaded(e:Event):void
        {
            L.contentLoaderInfo.removeEventListener(Event.INIT, onLoaded);

            // Get a direct reference to the loaded movie root.
            M = L.content as MovieClip;

            // Set up the watchdog for loaded movie to finish.
            addEventListener(Event.ENTER_FRAME, onWatch);
        }

        // Event.ENTER_FRAME handler to watch the loaded movie playback.
        private function onWatch(e:Event):void
        {
            if (M.currentFrame >= M.totalFrames)
            {
                M.stop();

                // Announce the end of playback.
                dispatchEvent(new Event(Event.COMPLETE));
            }
        }

        // Unloads movie and cleans up.
        public function dispose():void
        {
            removeEventListener(Event.ENTER_FRAME, onWatch);

            L.unloadAndStop(true);

            removeChild(L);

            L = null;
            M = null;
        }
    }
}
其次,编写一个控制脚本,生成该类的一个实例,告诉它通过其URL播放SWF,然后等待播放结束并继续下一部电影

import ExternalMovie;

var EML:ExternalMovie;

var current:int = -1;
var plan:Array = ["child1.swf", "child2.swf"];

// Start the first one manually.
playNext();

function playNext(e:Event = null):void
{
    // Clean up the last one, if any.
    if (EML)
    {
        removeChild(EML);

        EML.removeEventListener(Event.COMPLETE, playNext);
        EML.dispose();
        EML = null;
    }

    // Switch to next url.
    current++;

    // Loop from the beginning if last movie just played.
    if (current >= plan.length)
    {
        current = 0;
    }

    // Get the next movie URL.
    var nextURL:String = plan[current];

    EML = new ExternalMovie;

    // Subscribe to Event.COMPLETE event to know the exact moment the
    // current movie finished playing to remove it and load the next one.
    EML.addEventListener(Event.COMPLETE, playNext);
    EML.loadAndPlay(nextURL);

    addChild(EML);
}

请记住,以上所有内容与其说是一个完整的工作解决方案,不如说是一个指南(尽管它可能会起作用)。

首先感谢您的精彩回答。。。但是仅仅因为这一行:公共类ExternalMovie扩展了一个精灵Flash说我不能在fla文件中添加任何一行,因为你的类扩展了一个精灵。。。当我把Sprite改成MovieClip时,它又开始产生另一个错误。。。有没有办法将脚本的时间线部分放到那个类中…?@SOmeon你需要学习和理解类的概念:而且,我没有费心为类创建导入,请自己做。似乎地球上没有正确循环swf文件的代码…:是的。。。我已经用你的代码添加了一些导入到MovieClip的类Sprite。。。。然后我每次都会出错。。。上次我得到这个:Error:Error#2136:SWF文件file:///E|/循环/测试%5FE导出%20%2D%20Copy/3%20Export/Untitled%2D1.swf包含无效数据。在ExternalMovie/frame1()@SOmeon#2136中,表示您正在做一些根本错误的事情:
import ExternalMovie;

var EML:ExternalMovie;

var current:int = -1;
var plan:Array = ["child1.swf", "child2.swf"];

// Start the first one manually.
playNext();

function playNext(e:Event = null):void
{
    // Clean up the last one, if any.
    if (EML)
    {
        removeChild(EML);

        EML.removeEventListener(Event.COMPLETE, playNext);
        EML.dispose();
        EML = null;
    }

    // Switch to next url.
    current++;

    // Loop from the beginning if last movie just played.
    if (current >= plan.length)
    {
        current = 0;
    }

    // Get the next movie URL.
    var nextURL:String = plan[current];

    EML = new ExternalMovie;

    // Subscribe to Event.COMPLETE event to know the exact moment the
    // current movie finished playing to remove it and load the next one.
    EML.addEventListener(Event.COMPLETE, playNext);
    EML.loadAndPlay(nextURL);

    addChild(EML);
}