Swa*_*ngh 6 flash actionscript-3 flash-builder flash-cs5
我的flash应用程序有点大,所以我想在我的应用程序中嵌入一个预加载器,那么有人可以告诉我如何在新的'Scene'中创建预加载器并在预加载完成后加载另一个场景吗?
提前致谢!
pac*_*age 12
更新:
选项1. Flash IDE,一个swf文件
要在使用Flash IDE进行编译时使用嵌入式预加载器,您应该将Document Class代码移动到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();
}
Run Code Online (Sandbox Code Playgroud)
加载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);
}
Run Code Online (Sandbox Code Playgroud)
当您尝试stage从您的Document Class constructor等处访问时,此方法有时会出现其他问题,但在大多数情况下,这应该可以完成.
选项3.不同的IDE,我的建议: FlashDevelop
如果您尝试使用FlashDevelop,Flash Builder或任何其他IDE编译我最初发布的代码,它应该可以工作.
原帖:
这是嵌入式预加载器的基本设置.你Document Class应该看起来像这样:
package {
import flash.display.Sprite;
[Frame(factoryClass='Preloader')] //class name of your preloader
public class Main extends Sprite {
public function Main() {
//init
}
}
}
Run Code Online (Sandbox Code Playgroud)
预加载器类:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)