actionscript project 中的预加载
现在又很多的sns、web game都是用 flash来做的,其中有的是用Flas CS开发完成的,又的使用Flex porject完成的也有是用 Actionscript project完成的。Flex peoject的Preloader他是给你做好的,你只要做一下相关的设置或继承就可以了。那么怎么用actionscript project中实现preloader呢。
flash早期的设计的目的就是想让flash边下载边播放,所以都把资源都编译到相应的帧当中去了,flex project application中一般有两帧:一帧是PreLoader,一帧是Application。这样我们在第一帧中放置一些简单的加载动画来减缓对第二帧的加载的等待。actionscript project中只有一帧,所以loader要单独做swf来load你的application,但是样对于一个web game或以个sns app的逻辑上和代码管理上并不是很好,所以我们要早到在actionscript project实现编译出两帧的办法来。
那就是
frames.frame label class name [...]
generate-frame-loader=true|false
[Frame(factoryClass="mx.managers.SystemManager")]
flex sdk中对此的相关的相关介绍很少或者就没有,也只能到网上去看看有没有比较权威的人士对他做出的解释。
今天看到一个比较老的文章,就是将这个的http://www.bit-101.com/blog
/?p=946
介绍的很全面很细致,但是结果试下来却没有成功。
按照上面的方法,我声明了主application(MyApplication) [Frame(factoryClass="SystemManager",label="hello")]
然后在SystemManager中实现了Preloader和对MyApplication的初始化。
但是在
/**这里不能直接写成:
var app:Application = new Application();
这样的由于引用到 Application,Application中所有的资源都会被编译到第一帧来
这样的话 PreLoader就没有意义了,你也看不到PreLoader,就跳到第二帧了
**/
var appCls:Class = getDefinitionByName("MyApplication") as Class;
var app:DisplayObject = new appCls() as DisplayObject;
addChild(app);
这里还是报错,看了下flash的大小,看来MyApplication是没有编译到flash的第二帧。
于是我在编译参数里面,设置了
-frames.frame MyApplication MyApplication
就可以了,MyApplication是被编译到了第二帧,这样第一帧只有很少的代码量和资源引用,这样flash就可以很快的将一帧加载完并显示 loading状态。
*这里唯一要注意的地方就是,在第一帧中 不要将一些不要的资源引用进来,这样会增大第一帧的体积。
类文件:
package {
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.utils.getDefinitionByName;
public class SystemManager extends MovieClip {
private var preLoader:PreLoader;
public function SystemManager() {
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stop();
preLoader = new PreLoader();
addChild(preLoader);
preLoader.x = stage.stageWidth/2 - preLoader.width/2;
preLoader.x = stage.stageHeight/2 - preLoader.height/2;
loaderInfo.addEventListener(ProgressEvent.PROGRESS,progressHandle);
loaderInfo.addEventListener(Event.COMPLETE,completeHandler);
}
private function progressHandle(e:ProgressEvent):void {
preLoader.setProgress(e.bytesLoaded,e.bytesTotal);
}
private function completeHandler(e:Event):void {
loaderInfo.removeEventListener(ProgressEvent.PROGRESS,progressHandle);
loaderInfo.removeEventListener(Event.COMPLETE,completeHandler);
this.removeChild(preLoader);
preLoader = null;
nextFrame();
initApplication();
}
private function initApplication():void {
/**这里不能直接写成:
var app:Application = new Application();
这样的由于引用到 Application,Application中所有的资源都会被编译到第一帧来
这样的话 PreLoader就没有意义了,你也看不到PreLoader,就跳到第二帧了
**/
var appCls:Class = getDefinitionByName("MyApplication") as Class;
var app:DisplayObject = new appCls() as DisplayObject;
addChild(app);
}
}
}
package {
import flash.display.Sprite;
import mx.core.BitmapAsset;
[Frame(factoryClass="SystemManager",label="hello")]
public class MyApplication extends Sprite {
[Embed(source="tets.png")]
private var bigPicCls:Class;
public function MyApplication() {
var b:BitmapAsset = new bigPicCls() as BitmapAsset;
addChild(b);
}
}
}
package {
import flash.display.Sprite;
import flash.text.TextField;
public class PreLoader extends Sprite {
public function PreLoader() {
var t:TextField = new TextField();
t.border = true;
t.text = "loading......";
addChild(t);
}
public function setProgress(loaded:uint,total:uint):void {
var t:TextField = getChildAt(0) as TextField;
t.text = "load: "+ loaded/1000 + "/" + total/1000;
trace("load: "+ loaded/1000 + "/" + total/1000);
}
}
}
分享到:
相关推荐
美丽的Flex Preloader控件,页面预加载效果 美丽的Flex Preloader控件,页面预加载效果 美丽的Flex Preloader控件,页面预加载效果 美丽的Flex Preloader控件,页面预加载效果
Flex actionscript3 as3加载文件资源进度条.rar
ActionScript 3.0 语言和组件参考概述Adobe Flex 2 语言参考ActionScript 3.0 语言和组件参考是适用于 Flash® Player 应用程序编程接口 (API) 的参考手册。 Adobe Flex 2 语言参考ActionScript 3.0 语言和组件...
ActionScript语句中文全解
ActionScript 3.0 CookBook 中文翻译 ActionScript 3.0 flash+flex
ActionScript3中文手册
actionscript3.0开发的进度显示条项目
ActionScript3中文教程,详细介绍了用 FLASH CS3开发应用程序。
内含actionscript3.0中文教程和ActionScript 3.0中文api
ActionScript3中的JSON编码解码包
ActionScript 3.0 Cookbook中文
Adobe Flash 中的 ActionScript 2
本手册提供了 ActionScript 语言中所支持元素的语法和用法信息。 其中包括以下部分: 下面的 《ActionScript 3.0 语言和组件参考》是 Flash® Player 和 Adobe® AIR™ 应用程序编程接口 (API) 的参考手册。 语言...
ActionScript 是由 Flash Player 中的 ActionScript 虚拟机 (AVM) 来执行的。ActionScript 代码通常被编译器编译成“字节码格式”(一种由计算机编写且能够为计算机所理解的编程 语言) ,如 Adobe Flash CS3 ...
第5章 ActionScript3.0中的String对象 第6章 ActionScript3.0中的Array类型 第7章 ActionScript3.0中的日期和时间 第8章 ActionScript3.0异常处理 第3篇 ActionScript3.0可视化编程 第9章 可视化编程...
本书讨论了在Flash Player里执行的ActionScript 3.0语言,采用问题—解法—讨论的形式讲解开发过程中常见问题的实际解法,例如:检测用户的 Flash Player 版本或操作系统;格式化日期和货币类型;接受用户输入及操作...
fla中是与“ActionScript 3视觉编程”部分相关的内容,主要是一些fla文件和xml文件,用于讲解类绑定、组件制作等与视图紧密相关的例子。 Sample.fla用于读者编译本书文档类例子,是一个空Fla文件。 ...
ActionScript3.0是adobe公司推出的面向对象的flash编程语言,非常适合有java,C++,C#等程序员学习并转向基于flash的RIA应用开发,本中文帮助将有助于更高效的了解AS3的核心API。
本书在讲解过程中对于ActionScript 3中相对于ActionScript 2 的改动进行了一一指出,并从理论上解释了为何改变及相关的实现。使ActionScript 2 程序员能够快速上手ActionScript 3 ,并对ActionScript 2代码移植有...
这是Actionscript的参考手册 希望在大家学习过程中能帮上忙