Browse > Home > Archive: 03月 2008

| Subcribe via RSS

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 , 154 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使用文档

Batch convert files to Flashpaper2

03月 18th, 2008 | No Comments , 207 views | Posted by flashlizi in Flash CS3/AS3

Command:
FlashPrinter.exe {PATH TO DOCUMENT} -o {OUTPUT PATH & FILE with SWF extention}
Example:
FlashPrinter.exe riaidea.doc -o riaidea.swf

XFL:新的flash源文件格式

03月 7th, 2008 | No Comments , 221 views | Posted by flashlizi in News

今天从Moock的blog上看到一个令人兴奋的消息:XFL: Flash's New Source Format。根据adobe的flash产品经理Richard Galvan的透露,flash IDE的下一个版本(flash cs4)将会引入一种全新的文件格式:XFL。

现在为止,flash源文件都是保存为二进制的FLA格式,.fla文件格式不是公开的。将来的flash cs4除开fla之外还可以把flash源文件保存为.xfl格式,这是一种和air类似的zip压缩文件格式。zip文件里包含一个描述flash文件结构的xml文件和一个包含所有组件资源(如图片、声音、视频等)的文件夹。adobe将会公开XFL文件格式,允许第三方工具导入和导出XFL。不过,最终还是要通过flash工具把XFL文件编译为swf文件。

当然,如果adobe再提供XFL-TO-SWF的编译器或接口,那么现在的一些如flash develop这样的开发工具将会变成无需借助flash IDE,可以完全独立开发flash项目的IDE。以后开发flash将会越来越爽快了!

继续联想一下,看着silverlight的迅速发展,adobe是否有可能考虑增加一种swfx的格式,一个zip文件,包含swf文件的xml描述以及资源,就像microsoft的open XML一样,而flash player所要做的就是解析以及呈现zip文件里的内容。

AS3 Library: ZipArchive 0.1 Release

03月 5th, 2008 | 5 Comments , 694 views | Posted by flashlizi in Flash CS3/AS3

ZipArchive是一个Zip档案处理类,可读写各种zip格式文件。(update version 0.11)

基本介绍:
1)轻松创建或加载一个zip档案;
2)多种方式读取和删除zip档案中的文件;
3)支持中文文件名;
4)非常容易序列化一个zip档案,如有AIR、PHP等的支持就可以把生成的zip档案保存在本地或服务器上。

下载:源文件+API文档+示例
查看:API文档

读取zip文件可查看下载包中的example示例。保存zip文件部分可参考我以前发布的AirZip功能演示。

下面是下载包中的example示例的部分代码:

public class Example extends Sprite {
    
private var zip1:ZipArchive = new ZipArchive();
    
public function Example() {
        
//加载一个zip档案
        
zip1.load("test.zip");
        
zip1.addEventListener(ProgressEvent.PROGRESS, loading);
        
zip1.addEventListener(ZipEvent.ZIP_INIT, inited);
        
zip1.addEventListener(ZipEvent.ZIP_FAILED, failed);
        
zip1.addEventListener(IOErrorEvent.IO_ERROR, ioError);
    
}
    
private function inited(evt:ZipEvent):void {
        
zip1.removeEventListener(ProgressEvent.PROGRESS, loading);
        
zip1.removeEventListener(ZipEvent.ZIP_INIT, inited);
        
zip1.removeEventListener(ZipEvent.ZIP_FAILED, failed);
        
//添加ZIP_CONTENT_LOADED事件侦听器
        
zip1.addEventListener(ZipEvent.ZIP_CONTENT_LOADED, imgloaded);
        
trace("原始zip文件内容\r", zip1);
        
//读取zip1中的xml文件
        
var xmlFile:ZipFile = zip1.getFileByName("sample.xml");
        
var xml:XML = new XML(xmlFile.data);
        
trace(xml);
        
//根据字符串内容创建一个新的txt文件
        
var txtContent:String = "这是一个测试文本文件";
        
zip1.addFileFromString("测试.txt", txtContent);
        
//trace(zip1.getFileByName("测试.txt").data);
        
//复制zip1中的girl.jpg为张曼玉.jpg
        
var zmy:ZipFile = zip1.getFileByName("girl.jpg");
        
zip1.addFileFromBytes("张曼玉.jpg", zmy.data);
        
//加载zip1中的新生成的图片文件的Bitmap对象
        
zip1.getBitmapByName("张曼玉.jpg");
        
//删除图片文件logo.gif
        
zip1.removeFileByName("logo.gif");
        
trace("\r修改后的zip文件内容\r", zip1);
    
}
    
private function imgloaded(evt:ZipEvent):void {
        
zip1.removeEventListener(ZipEvent.ZIP_CONTENT_LOADED, imgloaded);
        
var img:Bitmap = evt.content as Bitmap;
        
addChild(img);
    
}
    
private function loading(evt:ProgressEvent):void {
        
//trace(evt.currentTarget, evt.bytesLoaded, evt.bytesTotal);
    
}
    
private function failed(evt:ZipEvent):void {
        
//trace(evt.content);
    
}
    
private function ioError(evt:IOErrorEvent):void {
        
//trace(evt);
    
}
}

AirZip:解压缩Zip文件的air小程序

03月 4th, 2008 | 1 Comment , 558 views | Posted by flashlizi in Adobe AIR

最近一个项目中需要用到解压缩Zip文件,网上比较好的有fzip和nochump的zipFile组件。不过两者都不太符合我的要求,因此我采用nochump的zip文件解压Inflater算法,开发了自己的ZipArchive组件。

部分API如下:
1、constructor [ZipArchive构造函数,创建一个新的zip档案]
2、load [加载一个外部zip档案,如.zip/.air/.docx/.xlsx等采用zlib压缩的档案]
3、open [打开一个二进制流的zip档案]
4、output [把ZipArchive档案实例输出二进制的zip文件,用来生成zip文件]
5、getFileByName [根据文件名获取zip档案中的某个文件]
6、getFileAt [根据文件位置序号获取zip档案中的某个文件]
7、getBitmapByName [根据文件名获取zip档案中的某个图片文件的Bitmap]
8、removeFileByName [根据文件名删除zip档案中的某个文件]
9、removeFileAt [根据文件位置序号删除zip档案中的某个文件]
10、addFile [添加文件到zip档案]
11、addFileFromBytes [从二进制数据添加文件到zip档案]
12、addFileFromString [根据指定的字符串内容添加文件到zip档案,比如.txt/.xml文件]

因为AIR1.0正式版刚刚发布,所以我根据此组件,做了一个简单的zip文件浏览和压缩的程序。使用此程序可以打开一个zip格式的文件,如.zip/.air/.docx/.xlsx等,显示此zip档案中的所有文件信息。当然还可以使用此程序把若干个文件压缩成一个zip档案保存到本地。

附上程序截图:

浏览压缩文件


压缩为zip文件

有兴趣的朋友可以下载此Air程序来体验一下(此zip文件就是airzip生成的)。ZipArchive组件还在完善中,源文件和API文档不久也会释出。

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