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
Flash 如何在AS3中创建预加载程序_Flash_Actionscript 3_Flash Builder_Flash Cs5 - Fatal编程技术网

Flash 如何在AS3中创建预加载程序

Flash 如何在AS3中创建预加载程序,flash,actionscript-3,flash-builder,flash-cs5,Flash,Actionscript 3,Flash Builder,Flash Cs5,我的flash应用程序有点大,所以我想在我的应用程序中嵌入一个预加载程序, 所以,谁能告诉我如何在新的“场景”中创建一个预加载程序 预加载完成后是否加载另一个场景 提前谢谢 我建议选择“轻量swf加载重量swf”路线,因为这是我见过的最有效的路线。有大量臃肿的教程,但对我来说,我喜欢这一个,它直截了当。这篇文章介绍了如何创建嵌入式as3预加载程序 更新: 备选案文1。flashide,一个swf文件 要在使用Flash IDE编译时拥有嵌入式预加载程序,您应该将文档类代码移动到FLA文件的第二帧

我的flash应用程序有点大,所以我想在我的应用程序中嵌入一个预加载程序, 所以,谁能告诉我如何在新的“场景”中创建一个预加载程序 预加载完成后是否加载另一个场景


提前谢谢

我建议选择“轻量swf加载重量swf”路线,因为这是我见过的最有效的路线。有大量臃肿的教程,但对我来说,我喜欢这一个,它直截了当。

这篇文章介绍了如何创建嵌入式as3预加载程序

更新:

备选案文1。flashide,一个swf文件

要在使用Flash IDE编译时拥有嵌入式预加载程序,您应该将
文档类
代码移动到FLA文件的第二帧(当然没有包和类构造函数),并将
文档类
作为文件从项目属性中删除。在第一帧中,您应放置以下代码:

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。flashide,两个swf文件

另一个选项,正如另一位评论者已经推荐的那样,是保持应用程序swf的原样,并创建另一个轻量级swf来加载第一个swf。 第一帧中preload.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);
}
当您尝试从
文档类构造函数
等访问
阶段
时,这种方法有时会出现其他问题,但在大多数情况下,这应该可以完成任务

备选案文3。不同的IDE,我的建议:

如果您试图用FlashDevelop、FlashBuilder或任何其他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);
     }
  }
}

您还可以在应用程序启动之前和加载应用程序文件时使用第三方库(如Greensock)进行预加载

我个人使用Greensock并推荐它。它解决了loaderInfo类的一些错误

[Frame(factoryClass='Preloader')]不再适用于新的ASC 2.0编译器。相反,预加载程序将成为您的文档类,您需要添加一个额外的编译器参数,以告诉flash在第二帧中包含您的主类(不要在预加载程序中引用它):

-frame=名称DOESNTMATTER,主


您是否发现任何错误?你能展示一下你的
文档类的预加载和初始化代码吗?
?不,我没有收到任何错误消息,我的文档类和你说的完全一样。在
预加载
构造函数中添加跟踪语句,检查预加载是否正确初始化:
跟踪(“开始预加载”)
如果您没有收到此消息,则说明
文档
类有问题。不,预订单类没有执行。您的
文档
类是否有
[Frame]
元标记?您使用什么IDE来编译项目?