Archive

Archive for the ‘Article’ Category

Flash Player 10新特性 – Vector

October 30th, 2008

在Flash Player 10之前,对于一个数组内的元素,我们是无法控制其类型的,也无法现在数组的长度,因为它可以自动增长,事实上,自动增长是会损失性能的,因为它需要动态分配内存地址。

FP10中增加了一个新的对象:Vector,它解决了上面的两个问题:

强类型
声明一个Vector对象你必须指定具体的类型:

var v:Vector.<String>;

这里指定了一个强制的类型:String, 不能加入其他类型的元素到这个Vector中,比如:

v[0] = 3.14;

这是不被允许的。

固定长度
你可以在构造函数中定于这个Vector的长度(也可以不定义)和设置是否为固定长度:

new Vector.<String>(length, fixed);

从测试看,Vector比Array在运算上快将近一倍:

var i : uint;
var t : uint;
var length : uint = 1000000;

//test Vector
t = getTimer();

var v:Vector. = new Vector.(length, true);
for( i = 0; i < length; i ++ )
{
	v[i] = "1";
}

trace(getTimer() - t);

//test Array
t = getTimer();

var a:Array = new Array();
for( i = 0; i < length; i ++ )
{
	a[i] = "1";
}

trace(getTimer() - t);

本文参考文档:http://help.adobe.com/en_US/AS3LCR/Flash_10.0/Vector.html

PS.感谢Mark提供 AS3 Syntax Highlighting

Article , , ,

Contrast the flash 3D engine

June 13th, 2008

最近做的一个项目中需要用到 3D,所以粗略的学习了一些目前Flash常用的3D engine。小有心得,和大家分享下。希望能给各位在选择3D engine时有所帮助。

papervision3d : 算是最老牌最流行的3d引擎了,as2时代就有。性能算是十分的不错(DEMO),支持 ASE 和 DAE 格式的3d模型,其中 DAE 格式的贴图支持得非常的不错。支持的材质方式十分之多,几乎我们所能想到的方式基本都有。但是相对来说,模型却不多,而且Camera也不是很好用,没有默认的控制器。并且我发现他最近更新不快,很多功能没有陆续增加,实在是可惜。如果你需要做一个需要高性能,不需要动态灯光,碰撞检测等的项目,pv3d是不错的选择。许可:MIT MIT License

Alternativa 3D : 一群俄罗斯人写的一个商业性的3d引擎,支持3DS格式模型,支持碰撞检测。有一个类似Counter-Strike的控制器,操作镜头是十分的方便。但是如果你希望动态的设置个别模型的位置什么的,那就惨了,性能十分的差。由于他不是开源项目,所以你是做商业应用,就得好好考虑了。许可:Alternativa3D License

Away3d : 这是一个功能很强大的3d引擎,支持多种(ASE, DAE, KMZ, 3DS, Md2, Obj)模型格式,支持3D动画,支持动态灯光等,不过性能貌似不怎么样,一个1024*1024的立方体都跑得够呛,不知道是不是我没有设置好。许可:Apache License2

Sandy 3D : 看上去十分象PV3D,实际上我觉得他比PV3d好用,结构更加清晰,性能也十分不错。不过我觉得他还不够成熟,所以选择时需要谨慎。许可:Mozilla Public License 1.1 

Sharikura 3D : 一个日本人写的,相信大家都看过 pictaps,那是相当的不错。在MAX会上演示的 ECO ZOO更是叹为观止。十分流畅的3D动画,都怀疑是否是flash做的。不过我们目前还只能看看这些漂亮的demo。

最后说说Flash Player10, 它在运算性能上确实提高了不少,并且提供了更多好用的功能。但是据我测试其3d性能,实在是十分一般,我仅仅对10张256*256的图片作rotationY递增,CUP就吃光了,而且我有ATI 256M独立显卡呢。看来FP10是好,使用需谨慎!

Article , , , ,

如何选择开源项目进行Flash项目开发?

May 12th, 2008

一直以来,我都是自己写一个Library包来为项目开发提供基础类。这个Library有些是自己写的,有些的拿了别人的代码,整合在一起。而事实上,这些功能大多在目前的Flash开源项目中都有,我的工作基本属于重复开发。

为什么开发项目难以发扬光大?我认为有部分原因是因为大家各自为政,开发了很多类似的东西,而没有集中精力来做好一个;虽各有所长,但不统一,所以,我打算在下一阶段集中维护和整合别人的开源项目应用到自己的项目中,这样我就可以跳出自己开发这些Library的框框,致力于项目的开发。

一下是我打算整合的一些开源项目,更多的开源项目可以到 osflash.org 找到。

Core

  • as3corelib : charles.bihis 和Adobe团队维护的一个项目,里面有很多的功能,包括一些编码、JSON、Formater和一些网络相关的类,比较实用。而且bug比较少。

Application framework

  • puremvc : 小型的项目你可以随便写就可以,但是大型的多人开发的项目,你最好有一个好的框架,puremvc也许不是最好的,但是它确实是一个不错的选择。

Data Structures

  • as3ds : 一般情况下我们都用Array和Dictionary就差不多了,但是不代表你不需要一个队列什么的,as3ds在类命名上感觉有些怪,但是性能还是不错。

UI Component

  • Flash CS3 UI Component : 也许很多人骂v3组件,但是对于一些小型项目来说,它可以大大降低我们的开发速度,因为你可以叫Designer去自己布局这些组件,而不用你来换肤之类的。
  • Liquid Components : 这个组件还没有发布,但是我很期待它,看看demo吧,所有组件的Skin只需是一张图片,有了这个组件,你只需要designer按照文档给你图片就可以了,哈哈~当然,请确保你不是designer。

Layout Manager

  • Yahoo Layout Utility : 布局管理器对于有大量列表和需要自适应窗口大小的程序来说,就变得必不可少,我在这里推荐 Yahoo Flash 开发组开发的组件。它提供一组支持Flash CS3的组件,编码规范,文档齐全。如果不需要,不妨去看看。

Multi files download

  • masapi : 一个相当好用的多文件加载框架. 在项目的开始时,我们一般都需要加载很多很多的XML、图片等文件,用它我们就可以整合所有的文件加载,并显示到一个进度条中。

Animation

  • tweener : 提供一组静态的接口,使用起来很是方便。
  • boostworthy : 这个比起 tweener 来说,更加强大,且结构规范合理。为什么要两个都用呢,是因为很多的设计人员会用这两个做demo效果,为保持参数的统一,所以我打算都用。

3d engine

  • papervision3d : 3D已经是一种趋势,Adobe自己都打算推出了呢,但是目前比较主流的还是这个PV3d,所有如果有3d方面的项目,肯定少了它。
Localization
  • Flex ResourceBundle:对于多语言,我认为用Flex自带的这个功能就不错,你可以不使用Flex组件,但是你可以在ActionScript Project 中使用这个功能,它仅仅加大你swf文件9k.并且Flex3 支持动态加载语言,并附送DateFormater、StringFormater功能。 ResoureBundle 在 Flex3 正式版中已不再支持ActionScript project。

Logging

  • 实在是没有找到很好的,目前来说我还是用的自己开发的。如果哪位有发现好用的,推荐给我。同时我也打算加强我那个Output工具。

Unit test

  • asunit : 测试关系到一个项目的成败,如果你需要白盒测试,asunit是不错的选择。

这里罗列的是我在项目中用到的,当然不乏更好的选择。它们之间有些很少一部分的功能存在重叠,比如masapi 中也有一个Data Structures包,但是总体来说很是比较和谐,基本不会出现冲突。

列出来给大家一个参考,如果你有更好地,也可以告诉我。

Article , , , , , , , , , , , , ,

使用Output在Flash中显示测试信息

September 23rd, 2007

一、啥是Output?

在我们开发Flash程序时,我们可以通过Flex的debug来显示我们的测试信息,但是,有的时候,测试环境并不理想,比如,你要把你的程序上传到网站上来测试网络等是否OK,这个时候,trace出来的信息是无法得到的。这个时候你就有必要建立一个文本框,将你要测试的信息显示在这个文本框中。Output就是这个文本框,只是它比一般的文本框更强大。下面是一个演示:

二:使用Output到你的项目中

  1. 下载output.swc (583) - 64.49 KB 。如果你希望得到源代码,请访问google code
  2. 将output.swc加入到你项目的Library中。
  3. 在你程序需要显示测试代码之前实例化Output,并加入到主场景,如::this.addChild(new Output(150,true)); 查看Output API
  4. 将需要显示的测试信息采用Tracer抛出,如:Tracer.log(‘add Log info.’); 可以查看这个API获取更多信息.
  5. 如果你还不是很清楚,请下载示例中的源代码:output source (603) - 833 bytes.

Article , , ,

Flash vs Silverlight

August 31st, 2007

下面是来自TechTarget的一张Flash/Silverlight技术比较表:

从中可以看到貌似Flash比Silverlight要弱,但是值的提出的是,最新发布的beta版flash已经支持H264,所以在视频格式这个部分Adobe已经在努力。此外,Flash拥有大量的开发者,普及率也很高,再看看Silverlight的UI编辑器吧,那简直是一个噩梦,就像用完PhotoShop后改用画图板,看来,Silverlight还有很长的路要走。

我希望Silverlight有更出色的表现,毕竟,多一些竞争多一些选择,对于我们开发者来说都没有坏处。

PS.你希望 Flash Player10 有什么功能呢?我希望Adobe可以做这些:

  • 更多媒体格式的支持(mov、avi)
  • 高清图片支持(现在BitmapData限制在2880*2880)
  • 更强大的Web语言交互的能力
  • 图形特效和图像处理性能的提高

Article ,

利用trace方法来诊断你的as3程序

August 28th, 2007

最近在开发的过程中比较多的用到了程序测试,有一些经验,希望和大家分享,不过这些也都只是我个人的一些方法,如果有更好的建议,一定要告诉我啊。废话不多说,开始!

一、trace方法的使用

最简单的就是这样:

trace("hello word!"); trace("my name is " + name);

其次你还可以这样:

trace("my name is ",name);

也就是说可以采用逗号分开来输出一组信息.

另外我比较喜欢采用数组:

trace([name,city,zip]);

二、利用Flex输出trace信息

这个是我最常用也是最方便的了,如何使用Flex我就不说了。

在Flex开发环境中,按F11开始测试,利用Eclipse的Console面板来输出。

这里值的一提的是,我之前采用Flex独立版开发,原因是性能比插件版要快,后来采用Eclipse插件版后,发先并没有慢多少,而且有更多好用的功能,不过这些不是我今天要讲的,所以有兴趣的话自己去体验吧。

三、使用fdb来输出trace信息

其实Flex也是利用这个东西来输出信息的,只是如果你不想打开Flex就可以对你的程序进行测试,那么fdb是比较轻量级的。

fdb是什么呢?应该算是flash player测试信息的接收器,它可以与你的debug程序建立连接,从而获取trace信息并显示出来。

fdb在你Flex 3.0的安装目录里面,具体位置是:\Adobe\Flex Builder 3 Plug-in\sdks\moxie\bin\fdb.exe

如何开始测试呢?我有写一个批处理,这样就不需要每次都去敲那个又长又复杂的cmd了。

@echo off "F:\Adobe\Flex Builder 3 Plug-in\sdks\moxie\bin\fdb.exe" file myApp-debug.swf pause

具体使用步骤:

  1. 在你的swf文件目录建立一个新的文件,命名为 debug.bat ,右键选择编辑,将上面的代码拷贝到文件中。
  2. 修改

    F:\Adobe\Flex Builder 3 Plug-in\sdks\moxie\bin\fdb.exe
    为你的Flex安装目录中的fdb文件位置。

  3. 修改

    myApp-debug.swf
    为你需要测试的swf文件
    注意:指定的文件必须是debug版本

  4. 双击 debug.bat 执行。如果输出类似一下信息,说明你成功运行:
    Adobe fdb (Flash Player Debugger) [build 172357] Copyright (c) 2004-2006 Adobe, Inc. All rights reserved.
    Attempting to launch and connect to Player using URL TWViewer_Pro_Pre-debug.swf Player connected;
    session starting. Set breakpoints and then type ‘continue’ to resume the session.
    [SWF] E:\IRIS\trunk\deploy\TWViewer_Pro_Pre-debug.swf – 562,219 bytes after deco mpression Session already in progress (fdb)
  5. 提示输入”continue”继续。那么就继续咯。此时,测试程序就跑起来了,你大概可以看到类似这样的信息,这些信息都是你在编码时trace抛出的。

    [trace] [DEBUG] 10:30:49 关闭当前加载的VT文件!
    [trace] [INFO] 10:30:49 加载图片所需时间 : 389
    [trace] [INFO] 10:30:49 设置数据时间1 : 202
    [trace] [DEBUG] 10:30:49 加载场景数据完成!
    [trace] [DEBUG] 10:30:49 删除加载页面完成!
    [trace] [DEBUG] 10:30:49 过渡效果完成,设置新场景!
    [trace] [INFO] 10:30:50 切换 地图:2e70f16a
    [trace] [DEBUG] 10:30:50 开始地图过度效果:1,2
    [trace] [DEBUG] 10:30:50 继续播放Movie! [trace] [INFO] 10:30:50 movie playing : true

这里只是介绍了如何测试了连接,更多的方法可以参考Flex帮助信息:Using the Command-Line Debugger

四、利用mm.cfg和flashlog.txt保存测试信息

这个方法 peterd 提到过。简单说来就是在mm.cfg中设置两个参数,是flash player将trace信息保存到flashlog.txt中,这样方便你查看。

flashlog.txt 只保存你最后运行过的flash信息。

flashlog.txt 可以保存非debug版本的trace信息,这个是fdb所不能的。

具体还可以参考Flex帮助:Configuring the debugger version of Flash Player to record trace() output

Article , , ,