无法获得文件下载AS3的工作进度条

时间:2011-12-08 19:05:32

标签: actionscript-3 progress-bar loader

我目前正在注册一个ActionScript课程,似乎无法让我的进度条正常工作。我们的任务是创建一个简单的图像加载器应用程序,它将访问外部托管的图像(通过使用PHP代理脚本),然后将图像吐出到用户的屏幕上(使用进度事件和进度条来跟踪图像的下载进度)。

然而,当我运行它时,我到处都会看到这些神秘的黑色图形故障,以及一个无效的进度条。在某些浏览器中,我收到以下错误:“ArgumentError:错误#2109:在场景NaN中找不到帧标签NaN。位于Document / imageLoadProgress()的flash.display.MovieClip / gotoAndStop()。

这是我的代码 - 我不能为我的生活弄清楚什么是错的。我认为它与imageLoadProgress()函数或我的进度条(它只是一个简单的100帧影片剪辑,其中包含补间动画和开头的“stop()”命令)。

public function loadImage()
    {
        var imageURL:String = imageArray[currentImageIndex];
        if(loaderInfo.url.substr(0,4) == "http")
        {
            trace("we're online");
            //use the proxy script
            //escape() will replace spaces in file names with %20
            imageURL = "./image_proxy.php?filename=" + escape(imageArray[currentImageIndex]);
        }

        var imageRequest:URLRequest = new URLRequest(imageURL);
        this.imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, this.imageIOError);
        this.imageLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, this.imageLoadProgress);
        this.imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, this.imageLoadComplete);
        this.imageLoader.load(imageRequest);
        //end loadImage
    }

    public function imageIOError(e:Event)
    {
        trace("ImageIOError called. Error=" + e);
        //end imageIOError
    }

    public function imageLoadProgress(e:ProgressEvent)
    {
        var percentLoaded:Number = e.bytesLoaded/e.bytesTotal;
        percentLoaded = Math.round(percentLoaded * 100);
        //this.progress_mc.scaleY = percentLoaded;
        if (percentLoaded < 1)
        {
            this.progressBar.gotoAndStop(1);
        }
        else
        {
            this.progressBar.gotoAndStop(percentLoaded);
        }
        //end imageLoadProgress
    }

1 个答案:

答案 0 :(得分:2)

你的装载程序脚本对我来说似乎绝对没问题,除了一个小小的缺陷: 错误消息中NaN(==非数字)对我来说唯一的方法是,如果您的ProgressEvent的bytesTotal属性等于0 - 因为除以零不会产生有效结果,因为我们都知道。

我不能确定为什么会发生这种情况,不知道你的任何服务器端代码,但我认为如果你的PHP代理脚本没有正确设置Content-Length HTTP响应头,就会发生这种情况。如果您正在加载实际的图像文件,Web服务器会自动为您设置标题 - 对于您的代理脚本,您似乎必须自己处理它。

无论如何,您可以通过测试NaN来确保您的加载程序脚本更加防错,并确保您跳转到的帧永远不会超过100:

var frame:int = isNaN (percentLoaded) || percentLoaded < 1 ? 1 : 
                         percentLoaded > 100 ? 100 : percentLoaded;
progressBar.gotoAndStop(frame);

(我选择了速记符号,但这与写两个if语句和else)基本相同。