Browse > Home > Archive by category 'Flex3'

| Subcribe via RSS

用Flex的编译参数实现AS3程序的自身预加载(Self Preloading)

04月 6th, 2009 | 2 Comments , 1,565 views | Posted by flashlizi in Flex3

记得在很早的时候,我在blueidea上写过一个关于as3自身加载的帖子,基本思想和as2中的原理类似,而且还曾被人批评为帧的概念太根深蒂固,as3中要完全抛弃frame。今天,我的一个flashdevelop的as3项目需要做个loading,我不觉得一个小swf去加载大的swf文件是一种很好的loading解决方案。 因为用的是flex sdk,没法像flash CS3那样创建帧,又不想创建一个fla文件,所以原来的办法似乎没法用了。

于是我翻出以前bit-101上的一片经典的as3自身加载的文章:Preloaders in AS3,仔细看看后,发现原来的想法是正确的,只不过在flex中靠的是元数据标签Frame来增加一个工程关键帧类factoryClass,而这个类在flex项目中默认为mx.managers.SystemManager,并由此控制flex程序的preloading实现。说白了,就是flex程序的其实都是2帧,第一帧默认是SystemManager类的实例,第二帧才是我们的Application文档类mxml。再进一步查看flex的as3 compiler的源程序,也证实了这点。

可是,当我用元数据标签Frame来加入preloading的时候,编译后的swf文件尺寸陡增,原来当用元数据标签Frame加入factoryClass的时候,就会编译很多flex框架类到swf中来,显然这不是我所期望的,这个方法也行不通。但用双帧原理来做preloading是显然的,因此问题的关键便在于如何创建一个双帧的swf。

当我在flex的as3 compiler的源程序中寻找的时候,突然在flex的编译程序mxmlc的编译参数中看到了一个高级可选参数frames.frame,搜索后找到这个参数在flex-config.xml中的具体用法:
<frames>
      <!-- frames.frame: A SWF frame label with a sequence of classnames that will be linked onto the frame.-->
      <!-- frames.frame usage:
      <frame>
         <label>string</label>
         <classname>string</classname>
      </frame>
      -->
</frames>

这个参数用mxmlc的cmd命令行参数模式为:
-frames.frame label classname

于是我在flashdevelop的项目属性的compiler options里的Additional Compiler Options里加入是一个已有但并未编译到文档类里的类FrameTwoClass:
-frames.frame FrameTwoClass FrameTwoClass
果然,在编译后的swf文件的classes里可以看到一个Frame 2: FrameTwoClass的类,因此便很容易知道,这个参数可以帮我们创建帧并链接到一个指定的类。

到这里为止,我想大家应该都差不多已经知道怎么实现self preloading了吧。创建一个Preloading类并设置为文档类,把我们真正的主程序Application类用刚才的参数frames.frame编译到第二帧上。在Preloading类中用enterframe事件监听loaderInfo的bytesLoaded和bytesTotal从而显示加载进度,当加载完后,利用反射方法getDefinitionByName()来创建真正的主程序Application类的实例,大功告成!

点击查看 demo源文件

Tags:

系列文章:深入了解Flex itemRenderer

11月 5th, 2008 | No Comments , 306 views | Posted by flashlizi in Flex3

Part 1: Inline renderers
Part 2: External renderers
Part 3: Communication
Part 4: States and transitions

用FlashDevelop开发兼容Flash和Flex的纯AS库SWC组件

05月 22nd, 2008 | 1 Comment , 559 views | Posted by flashlizi in Flex3

1、下载ExportSWC插件,解压到FD的Plugins目录,重启FD,在导航栏上会出现Export SWC的图标。
2、新建一个AS3的Default Project,在项目文件夹下会出现bin和src两个文件夹,删除src目录下Main.as。
3、打开project的properties面板,在classpaths里添加你想编译的as类库的目录。
4、在compiler options面板的Additional compiler options项里输入如下compc编译参数:
-namespace http://schemas.riaidea.com/as3lib/ manifest.xml -include-namespaces http://schemas.riaidea.com/as3lib/ -compute-digest=false
其中namespace和include-namespaces指定编译类库的命名空间,在这里你可以修改为你想要的命名空间。manifest.xml是你的as类库清单,它的具体写法请参看这里
5、点击Export SWC的按钮,即会在bin目录下生成一个swc文件,至此大功告成。

更新:最新版本的ExprotSWCPlugins

WebORB:整合Flash/Flex与服务端的通讯平台

04月 28th, 2008 | No Comments , 238 views | Posted by flashlizi in Flex3

WebORB是一个免费的整合Flash/Flex与服务端(.NET/Java/Ruby/PHP)的通讯平台,它对AMF0,AMF3,RTMP,XML都有很好的支持。特别是.NET平台,推荐使用WebORB。

Flex SDK coding conventions and best practices

04月 16th, 2008 | No Comments , 211 views | Posted by flashlizi in Flex3

Adobe Open Source上发布的Flex SDK编程规范与实践。内容包括命名、编程惯用法、文件组织管理、代码格式、项目文档ASDoc等一系列的规范。致力于Flex/Flash开发的朋友都值得一看,这有助于你进行效率更高,可读性更好的开发。

URL: http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions

再推荐一篇关于FMS3的文章:Dynamic stream switching with Flash Media Server 3

PHPQuery: A Simple AS3 Warper of AMFPHP

03月 25th, 2008 | No Comments , 177 views | Posted by flashlizi in Flex3

一个简单的amfphp封装,简化了amfphp的使用。
最新更新:增加getServices方法,返回所有可用的services方法集合的数组。需要在amfphp/services目录下增加ServiceUtils.php文件。PHPQuery和ServiceUtils在附件中均有下载。
使用示例:
var gateway:String = "http://localhost/amfphp/gateway.php";
PHPQuery.connect(gateway);
PHPQuery.getServices(onServices);
function onServices(result:Array):void {
for each(var method:* in result) trace(method);
}
var params:String = "www.riaidea.com";
PHPQuery.call("HelloWorld.say", onResult, onFault, params);
function onResult(result:Object):void {
trace(String(result));
}
function onFault(fault:Object):void {
trace(String(fault.description));
}

PHPQuery源码:
package {
import flash.net.NetConnection;
import flash.net.Responder;
public class PHPQuery {
private static var _gateway:String;
private static var netConnection:NetConnection;
//connect to specified amfphp gateway
public static function connect(gateway:String):void {
if (!netConnection) netConnection = new NetConnection();
_gateway = gateway;
netConnection.connect(gateway);
}
//call a php method.
public static function call(command:String, onResult:Function, onFault:Function = null, ...args):void {
var responder:Responder = new Responder(onResult, onFault);
var params:Array = [command, responder].concat(args);
netConnection.call.apply(null, params);
}
//get all services and theirs methods on amfphp
public static function getServices(onResult:Function, onFault:Function = null):void {
PHPQuery.call(”ServiceUtils.getServices”, function(result:Object) { onResult.call(null, listServices(result)); } , null);
}
//list all services’s methods
private static function listServices(result:Object):Array {
var out:Array = [];
for (var i:int = 0; i < result.length; i++) {
var re:Object = result[i];
if (re.children) {
var child:Array = listServices(re.children);
out = out.concat(child);
}else {
for(var m:String in re.methods) {
var method:String = "";
if (re.data) {
method += re.data.replace( /\\/ , ".");
}
method += re.label + "." + m;
out.push(method);
}
}
}
return out;
}
//get the amfphp gateway
public static function get gateway():String {
return _gateway;
}
}
}

点击下载PHPQuery和ServiceUtils文件

为你的ActionScript项目创建API文档

03月 19th, 2008 | No Comments , 149 views | Posted by flashlizi in Flex3

作为一个developer,写项目的API文档是非常重要的一件事情,flash developer也不例外。ASDoc能让我们快速创建ActionScript项目的API文档。

下面以一个实际的示例来说明如何创建API文档:

1)打开Adobe Flex 3 SDK Command Prompt。
2)用cd命令进入ActionScript项目的目录,如:cd D:\flashlizi\asdoc。
3)输入ASDoc命令:
asdoc -source-path . -window-title "ASDoc演示示例类" -package riaidea.asdoc "A Example of Using ASDoc" -doc-classes riaidea.utils.zip.ASDocExample
这是一个基本的asdoc命令。其中参数source-path表示as源文件目录,如果在当面目录则用点“.”来表示。window-title表示帮助文档的窗口标题,即浏览器窗口标题。package参数用来描述一个包,如这里描述包riaidea.asdoc为"A Example of Using ASDoc”。doc-classes用来指明需要生成API文档的类,如果指定的类中还引用了其他自定义类,那这些类也会生成API文档。
更详细的asdoc命令使用可以查看这里:http://livedocs.adobe.com/flex/3/html/index.html?content=asdoc_9.html
4)执行完毕后,在asdoc目录下会生成了一个asdoc-output目录,里面就是API文档。一般的,我们生成的API文档无需按26个字母分类,因此我们可以把里面的all-index-A.html到all-index-Z.html删除,并删除title-bar.html中的Index链接,这样的API文档就精简多了。

下面是本例中的类riaidea.utils.zip.ASDocExample的源码:
package riaidea.asdoc{
import flash.display.Sprite;
import flash.events.Event;
/**
* 当创建一个ASDocExample实例的时候调度init事件。
* @eventType mx.events.FlexEvent.BUTTON_DOWN
*/
[Event(name="init", type="flash.events.Event")]
/**
* ASDoc演示类。此例演示了如何写注释才能创建一个基本的AS项目的API文档。
* @example
* <listing version=”3.0″>
* var eg:ASDocExample=new ASDocExample();
* eg.print(”ASDoc演示类”);
* eg.test(”flashlizi”);
* * @see http://www.riaidea.com
*/
public class ASDocExample extends Sprite {
/**
* 实例的创建者。
* @default flashlizi
*/
public var creator:String;
private var _date:Date;
/**
* 构造函数-constructor。
*/
public function ASDocExample() {
this.creator = “flashlizi”;
this._date = new Date();
dispatchEvent(new Event(Event.INIT));
}
/**
* 打印参数指定内容。
* @param content 要打印的内容。
*/
public function print(content:String):void {
trace(content);
}
/**
* 测试类的创建者是否与参数指定名称相同。
* @param name 测试指定的名称。
* @return 创建者与指定名称相同返回true,否则返回false。
*/
public function test(name:String):Boolean {
return name == creator;
}
/**
* 实例的创建时间。
*/
public function get date():Date {
return date || new Date();
}
public function set date(value:Date):void {
_date = value;
}
}
}

现在来说明一下如果写类的注释才能创建一个比较完善的API文档。

1)首先,只有包含在/**与*/之间的注释才能被asdoc识别。对一个类的方法或者属性做注释,只要在之前加上这样的注释就可以了。
2)注释的第一行开始(不包括注释标记)是被注释对象(方法、属性等)的说明介绍。当出现@param 这样的注释标记的时候,asdoc就会自动解析为相应的内容。
3)本例ASDocExample中包含了一些常用的asdoc标记:
a、eventType。只能用于注释Event元标记,如[Event(name="init", type="flash.events.Event")]。这样在API文档中这个事件会出现这个类的Event说明块中。
b、example。用于创建一个示例。示例代码需写在< listing >和< /listing >之间。
c、see。用于创建“另请参见”说明块。
d、default。用于创建属性的“默认值”说明。
e、param。用于创建对方法的参数的说明。
f、return。用于创建对方法的返回值的说明。
g、private。使用此标记的方法或属性将不会输出到API文档中。

更多的asdoc标记请参看:http://livedocs.adobe.com/flex/3/html/help.html?content=asdoc_6.html#186140

下载本例的所有源文件: ASDocExample

update(2009-2-2): Adobe官方ASDoc Tool使用文档

wow gold wow gold wow gold wow power leveling wow power leveling wow power leveling nike shoes nike shoes nike shoes nike shoes jordan shoes Jordan shoes jordan shoes Jordan shoes world of warcraft gold world of warcraft gold Replica handbags 1