在 Flex / Actionscript 中加载并播放嵌入的 SWF 文件
我正在尝试在我的 Flex 应用程序中创建/使用预加载器。 预加载器是一个 SWF 文件,有 100 帧(加载器进度的每百分比 1 帧)。 基本上,我尝试将此 SWF 文件嵌入到我的应用程序中,将其显示在屏幕上,并在进度完成时更改显示的帧号。
到目前为止我的代码是(扩展了 Canvas):
[Embed("/../assets/preLoader.swf")]
private var SWFClass:Class;
private var _preLoader:MovieClip;
private var _progress:Number;
public function set progress(value:Number) : void {
_progress = value;
if(progress < 100) {
_preLoader.gotoAndPlay(progress, null);
}else {
_preLoader.gotoAndStop(0, null);
}
}
[Bindable]
public function get progress() : Number {
return _progress;
}
(Called on creationComplete event)
private function init() : void {
_preLoader = MovieClip(new SWFClass());
this.addChild(_preLoader);
_preLoader.play();
}
我得到的错误是:
TypeError: Error #1034: Type Coercion failed: cannot convert widgets::PreLoader_SWFClass@30b3be51 to mx.core.IUIComponent.at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::addingChild()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Container.as:3259]
请帮忙!
I'm trying to create / use a pre-loader in my flex application. The preloader is a SWF file which has 100 frames (1 for every percent of the loader progress). Basically I am trying to Embed this SWF file in my application, display it on screen and change the frame number being displayed as the progress completes.
The code I have so far is (which extends Canvas):
[Embed("/../assets/preLoader.swf")]
private var SWFClass:Class;
private var _preLoader:MovieClip;
private var _progress:Number;
public function set progress(value:Number) : void {
_progress = value;
if(progress < 100) {
_preLoader.gotoAndPlay(progress, null);
}else {
_preLoader.gotoAndStop(0, null);
}
}
[Bindable]
public function get progress() : Number {
return _progress;
}
(Called on creationComplete event)
private function init() : void {
_preLoader = MovieClip(new SWFClass());
this.addChild(_preLoader);
_preLoader.play();
}
The error I am getting is:
TypeError: Error #1034: Type Coercion failed: cannot convert widgets::PreLoader_SWFClass@30b3be51 to mx.core.IUIComponent.at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::addingChild()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Container.as:3259]
Please help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
希望这个工作
我试过这个。
Hope this work
I tried this.
您需要有一个实现
IUIComponent
的MovieClip
包装器,以便能够传递给addChild()
。 来自addChild()
您将需要这样的东西:
警告:未经测试的代码,应该只给您一个想法!
You need to have a wrapper over
MovieClip
that implements theIUIComponent
in order to be able to pass toaddChild()
. From theaddChild()
documentation:You will need something like this:
Warning: Untested code, should give you an idea only!
使用 sprite 而不是 Canvas 作为基类。 这样做的两个原因:
Canvas 有很多依赖项(调整到 100k+ 的 Flex 组件)。 您不想在显示预加载器之前等待所有这些加载完毕
Canvas 是 UIComponent 容器。 当您想要布局 UIComponent 时使用它。 在您的情况下,您不需要复杂的画布布局逻辑 - 您只需要显示一个 MovieClip。 所以不要使用canvas。
为了回答您原来的问题,SWFLoader 和 Image 是知道如何显示位图和影片剪辑的 UIComponent。 做这样的事情:
Use sprite instead of Canvas as a base class. Two reasons to do this:
Canvas has a lot of dependencies (to the tune of 100k+ of flex components). You don't want to wait for all this to load before displaying your preloader
Canvas is UIComponent container. Use it when you want to lay out UIComponents. In your case, you do not need complicated canvas layout logic - you just need to display a MovieClip. So don't use a canvas.
To answer your original question, SWFLoader and Image are UIComponents that know how to display Bitmaps and MovieClips. Do something like this instead:
查看 Preloader 类和Application 类的 preloader 属性。
正如文档所述,您绝对不应该为预加载器扩展 Flex UIComponent(或 Image 或 SWFLoader)类。
以下是如何自定义预加载器的一些示例:
http://www.pathf.com/blogs/2008/08/custom-flex-3-lightweight-preloader-with-source-code/
http://groups.adobe.com/posts/15d371c71d
http://www.webapper.net/index.cfm/2008/1/17/Flex- NotSo-自定义预加载器
Have a look at the the Preloader class and the preloader property of the Application class.
As the documentation says, you definitely shouldn't extend the Flex UIComponent (or Image or SWFLoader) classes for a preloader.
Here are a few examples of how to go about customising the preloader:
http://www.pathf.com/blogs/2008/08/custom-flex-3-lightweight-preloader-with-source-code/
http://groups.adobe.com/posts/15d371c71d
http://www.webapper.net/index.cfm/2008/1/17/Flex-NotSo-Custom-Preloader
我从此链接中找到了使用外部 swf 代码的自定义预加载器
http://askmeflash.com/article_m.php?p=article&id= 7
i found custom preloader using external swf code from this link
http://askmeflash.com/article_m.php?p=article&id=7