在路上

博客建站以来也快有一个月了,每次想写点什么都不得而终。究其原因还是自己太懒了。所以现在趁自己不懒的时候,记录自己在前端开发路上的点滴。 希望此文能做一个好的开始,以此共勉。

Flash开发到了如今,也到了日落西山,穷途末路的时候吧。从官方上来看,Adobe已经对Flash力不从心了,停止了移动端的FP的更新 ,把Flex捐给了Apache 。从开发者来看,大量新技术如Html5,Cocos2d,Unity3D的出现让开发者有了更多的选择,好多Flash老程序员都转行了,这似乎成了一个趋势 。 从市场上来看,如今的页游市场,已经不复当年的辉煌了,前篇一律的感觉玩家会卖账么?而且各种坑爹的运营导致Flash游戏的名声越来越臭。总之,对于即将毕业的我选择Flash开发这条路显然不是一个明智的选择。

但是对于一个能把一件衣服从新买到一直穿到破的人来说,东西用惯了想换下来,不是那么容易的。至少目前这件衣服对于我来说还是新的就足够了,穿破了再说。我喜欢AS3,喜欢Flex,喜欢Flash这就够了。再说程序员都认为自己使用的语言是最NB的,讨论哪种语言的好坏根本没有意义。

从2012年5月到现在,接触Flash编程也快有2年了。然而看了看Flash的技能树当真自愧不如。最近没事的时候我喜欢反编译一些看起来不错的游戏和软件,看着别人的代码,体会别人的开发思路。收获不少,同时也在感叹自己会的东西太少了。我发现,看博客,看开源项目或者成熟的商业作品的源码对自己的提升很有用。之前1年的学习可能仅仅只是让我上路了,知道怎么写代码,如何实现。但这些显然是不够的,要真真的独当一面要会的东西还有太多。

对于前端开发,一些人认为就是显示下界面,放放特效之类的,其实哪有那么简单。这里按照技能书大致列举下我做前端的过程自己会与不会的知识。认为写前端很轻松的可以体会下。

1.显示对象基础。其实大多人对前端的认识也就留在这一块了。以为也就是操作下显示对象,把数据显示出来。且不说下面的11条,就这一条,也不是一个人能半年之内搞精通的。这个是基础,至少目前我还不能在不看API的情况下说出每一个显示对象的属性和方法,以及应用。

2.特效和动画。对于一部分特效我们搞开发的做不来,还得交给美工特效大大们去做,还有一部分特效是可以用代码写的。那我们需要知道什么,做什么呢。1.矢量动画和帧动画的区别。2.如何用代码写动画,比如各类缓动,各类滤镜动画,Bitmap操作,Matrix操作等等。目前比较流行的动画开源库和引擎有,TweenLite(感觉体积比较大,所以一般自己实现),SpriteSheet ,DragonBones,这2个久仰大名有待学习。还有个PixelBender也是最近才知道的,搞的是高级图像处理,渣渣表示学不来。

3.媒体处理。之前写组件的时候写过音视频播放啊之类的(最近在倒腾bilibili的弹幕播放器,不弄不知道一弄才发现很是复杂。关于视频流的分段处理,流的数据生成模式,与主流视频网站的对接看的头都大了) ,后来接触到了FMS,玩过P2P通讯的视频语音文字图片文件的共享与收发,其实这也只是冰山一角。FMS主要的在于直播,点播方面比较好用。至于那些编码处理之类的那我也只是只闻其名了。媒体处理类的坑很深估计掉下去了就爬不起来了。

4.文本处理。文本引擎FTE和TLF,看名字就看晕了。TLF是基于FTE的,对FTE做了一次封装,感觉这和Adobe的OSMF是基于底层的媒体处理类似。这些目前没有深入了解。对于一般的文本处理,目前遇到的图文混排算上要求最高的吧,我用的是RichTextField解决的,感觉还不错。最近关于文本的敏感词过滤好像也是要学的。

5.网络通信。资源类,各种Loader的使用,不过这些东西在项目里面最好做一下封装,目前比较喜欢用的是FlexLite里面的加载器感觉封装的比较彻底。流处理,URLStream啊NetStream这类的东西很多。后台交互,Socket,AMF(这个比较好用,用来实现HTTP通讯,实际上Flex的RemoteObject就是基于这个的),另外还有RTMP,RTMFP协议,FMS上面用到的。

6.文件访问。在web上面的文件访问用FileReference来进行读写,可惜是需要把整个文件加载到浏览器内存才能操作。air的文件读写不用。ShareObject的使用俗称FlashCookie,存一些简单信息比较好用。对象序列化反序列化的ByteArray操作,文件操作少不了这个的。以及反射的使用。还有恶心的Flash跨域问题。

7.性能优化。每个ASer都在与名为性能的怪物战斗。这方面需要了解Flash的垃圾回收机制。常用的优化技巧有 ,事件的监听和移除,强引用弱引用,总之就是想办法去除不必要的引用,以便垃圾回收器能回收对象实例防止内存泄露。对于CPU的优化,主要是渲染方式的优化,像bitmap几个方法的快慢啊,矢量图与位图的区别啊。还有一些框架优化这类的。

8.flex。由于项目需要我完整的学习了FlexLite这个框架,核心思想就是Flex来的。我很喜欢这种架构设计(第2次说了),他的组件生命周期,3层验证失效机制,布局管理,皮肤适配,UI层管理。无论哪一个拿出来都要说好久。所以这里就不说了,有时间单独补上。

9.air。air里面有很多新的东西我都没接触到,这个也是一个领域啊。不过我还是更喜欢web开发一下。

10.图形基础。说是图形基础,对于我这个色盲来说,真的很难。什么色相,颜色矩阵,Bitmap操作什么的有待学习,教材已经订好,ActionScript3.0图像处理基础教程,根本一点都不基础好么。

11.架构设计。这也是目前我着重学习的,毕竟一个人要想独当一面这个东西不可或缺。目前很好的一个学习办法就是阅读商业项目的成熟代码去体会,然后在平时的码码中实际应用上去。

12.开源库。一个纯OOP开发语言当然离不开各类开源库以及引擎。上面说的几个是做动画用的比较多的开源库。像 UI框架之类的有,官方的Flex(Flex的架构设计简直赞,第3次了喂,可惜体积太大了), Aswing(没用过不说了) , FlexLite (DOM大大开发的UI框架,包含了Flex4的精髓) ,Features(和Starling配合)。物理引擎有 Box2DNape,这部分我暂时没接触。3D引擎有官方的3d底层Stage3D , 以及Away3DPV3D , Flar3D ,这些我都鲜有接触。MVC框架有 官方的Cairngorm(据说太大,所以应用的不是很广) , pureMVC(最近看的比较多的,蛮不错),Robotlegs(貌似比前者好,最近准备学)。游戏引擎类的有 Starling(移动平台应用比较多,没时间学) , D5Power(国人开发的rpg引擎,比较感兴趣,很有可能是我以后学rpg开发的敲门砖)。还有各种开源的小组件,开源的工具库这些的,都是每个Aser或多或少需要了解的东西,如果能深入理解源码那就更好了。

还有很多知识都是没有涉及到的比如各类游戏算法啊,工具啊之类的。希望此文能为我自己立一面旗帜(俗称立Flag),在今后的学习路上,像这面旗帜看齐,总之,那句话怎么说来着,我不在乎路的尽头有什么,我只在乎路边的风景,路还很长,且行且珍惜