加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash – 如何在AS3中创建Preloader

发布时间:2020-12-15 07:31:09 所属栏目:百科 来源:网络整理
导读:我的flash应用程序有点大,所以我想在我的应用程序中嵌入一个预加载器, 所以任何人都可以告诉我如何在新的’场景’中创建预加载器 在预加载完成后加载另一个场景? 提前致谢! 解决方法 更新: 选项1. Flash IDE,一个swf文件 要在使用Flash IDE进行编译时使用
我的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后,它将前进到下一帧,并应执行原始应用程序初始化代码.
如果您以大部分资产(图像等)位于Flash IDE库中并且未在第一帧上加载(您可以在每个库项目的属性中检查)的方式组织项目,则此方法很有效.

选项2. Flash IDE,两个swf文件

另一个选择,正如另一个评论者所建议的那样,是保持你的应用程序swf原样,并创建另一个轻量级swf,将加载第一个.
第一帧中preloader.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);
     }
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读