flash – 如何在AS3中创建Preloader
我的flash应用程序有点大,所以我想在我的应用程序中嵌入一个预加载器,
所以任何人都可以告诉我如何在新的’场景’中创建预加载器 在预加载完成后加载另一个场景? 提前致谢! 解决方法
更新:
选项1. Flash IDE,一个swf文件 要在使用Flash IDE进行编译时使用嵌入式预加载器,您应该将文档类代码移动到FLA文件的第2帧(当然没有包和类构造函数),并从项目属性中删除Document Class .as文件.在第一帧中,您应该放置这样的代码: stop(); // stops the timeline at preloader frame this.loaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress); function onProgress(e:ProgressEvent):void { var percent:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100); //additional code to update preloader graphics //.. if (percent == 100) onLoaded(); } function onLoaded() { this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS,onProgress); nextFrame(); } 加载swf后,它将前进到下一帧,并应执行原始应用程序初始化代码. 选项2. Flash IDE,两个swf文件 另一个选择,正如另一个评论者所建议的那样,是保持你的应用程序swf原样,并创建另一个轻量级swf,将加载第一个. var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress); loader.load(new URLRequest("path/to/application.swf")); function onProgress(e:ProgressEvent):void { var percent:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100); //additional code to update preloader graphics //.. if (percent == 100) onLoaded(); } function onLoaded():void { loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS,onProgress); var application:DisplayObject = loader.content; addChild(application); } 当您尝试从Document Class构造函数等访问stage时,此方法有时会出现其他问题,但在大多数情况下,这应该可以完成. 选项3.不同的IDE,我的建议:FlashDevelop 如果您尝试使用FlashDevelop,Flash Builder或任何其他IDE编译我最初发布的代码,它应该可以工作. 原帖: 这是嵌入式预加载器的基本设置.您的文档类应如下所示: package { import flash.display.Sprite; [Frame(factoryClass='Preloader')] //class name of your preloader public class Main extends Sprite { public function Main() { //init } } } 预加载器类: package { import flash.display.DisplayObject; import flash.display.MovieClip; import flash.events.ProgressEvent; import flash.utils.getDefinitionByName; public class Preloader extends MovieClip { public function Preloader() { //add preloader graphics //check loading progress this.loaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress); } private function onProgress(e:ProgressEvent):void { var percent:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100); if (percent == 100) { this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS,onProgress); onLoaded(); } } private function onLoaded():void { nextFrame(); //go to next frame var App:Class = getDefinitionByName("Main") as Class; //class of your app addChild(new App() as DisplayObject); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |