Recently in Cairngorm Category

给出一个比较老的链接http://www.uza.lt/codex/as3-global-object/

当时这个出来还是蛮受欢迎的

就我当年而言,我是不喜欢这种监听的,其实现在也不大满意

原因有蛮多,就当年而言,我的代码模式是我更乐意在一个逻辑体中对数据集合修改后或者发事件,或者直接调用绘制工具保持某个显示保持数据更新

因为一直做游戏的原因,其实发事件并不是一种高效的办法,这里要特指下是那种直接new一个event dispatch出去,因为无形中会产生创建的消耗,而as3创建一个对象并不快,虽然很多人很乐意谈论gc机制如何如何,但要意识到一点就是:gc是消耗cpu达到清理的目的。能事先预估到这种更新频率高的发送调用,还不如直接用内存换速度的方法实现

这又会引入一个新的争执,就是事件机制好不好,看了上面这段,估计都认为我厌恶事件,其实一个玩意采不采用事件发送,这要看具体想实现什么要的逻辑功能

比如一个component,大家会发现为什么open source包给出的component都是dispatch event来实现的,原因也很简单,因为人家给出的是共享给大家,方便通用性而言,事件机制相当不错,如果一个项目的某个component只有一个地方使用到,那我觉得还发送事件就有点问题了

对于最上面的地址,重温下代码,发现不是跟flex sdk中的ChangeWatch功能很类似么,也就是mxml中用得很频繁,也是相当核心[BIndable]和在flex component的属性中是使用{},把mxml解析出as3再编译,其实就是使用ChangeWatch实现,你的绑定数据集合跟上面的GlobalObject就差不多了

对于现在我在做的这个项目,其实框架我还保持了flex框架,因为这为我节省了很多ui的功夫,包括皮肤制作、组件功能相当多的部分,至于很多人喜欢谈论的flex框架大小问题,如果我重复去造下轮子,估计大小比flex的还大,而且用不到的功能组件,你是可以方便剔除掉的,比如一个button,自己写一个当然小了,但焦点管理、tab管理、皮肤九宫其实都未做考虑,而这我都需要

同样,这也是我保持使用[Bindable]的根本缘由,我见过很多自己用as3重做一个ui框架失败的项目,而且我也没有时间耗在这上面,再说小心点使用,其实内存效率都可以保持在一个我非常满意的效率,只是有一点比较不爽的就是,我虽然有办法让vo(就是上面的GlobalObject)在我需要的时候停止发送事件,也有办法在需要的时候重新激活继续发事件,但这步骤相当的麻烦--就是让给我不爽呀

我估计Cairngorm普及了这么久,估计很多人已经很习惯的把ModelLocator进行绑定,之后分发到各个不同的flex component,这是Cairngorm最核心的,也因为这个,它一出现跟flex框架相当的吻合,不过其他地方的转发,比如command delegate在具体项目中,是相当浪费的行为,就是说Cairngorm太学术性质了

不过就是因为太习惯ModelLocator的绑定,也导致了非常多的滥用绑定,而事后发现"哎呀,一用flex框架、Cairngorm内存就这么大呀,而且越跑内存越大",对于一般自己写的,event是比如容易去移除的,毕竟你写的嘛,但bindable是生成的,当然也是有办法去移除,就是不那么方便了

所以要回到原来,就是ModelLocator的绑定不应该这么随意,这其实太多教程、代码例子起了很不好的示范,就是把远程数据拿过来就直接绑定,利用PropertyChangeEvent分发到flex component界面,这看起来很爽,只要注意远程Delegate数据赋值,一切界面是视图上调整下,一个实例出来了,简单,清爽,代码也不多

其实这些实例大多对于本身来说他做法也没错,错的只是太过简单了,因为一个界面数据集合永远都不会是界面显示数据集合这么简单,内在相互逻辑都被忽略掉了,明白我的意思没,ModelLocator中有太多其实不需要绑定的数据被迫绑定,而且不会去解除绑定

 

Good Luck & Have Fun!

上次的包(RemoteObjectFMS Package--Cairngorm link Flash Media Server)存在一些很傻的bug,比如main的后缀没有改成asc之类的,惭愧亚

现在放出正式的,确保demo能真正能用的

FlexFMS fix SharedObject remove.zip

 

Good Luck & Have Fun!

如果只是单纯要在Flex中连接Flash Media Server就没有什么好说的了,跟actionscript3 project都差不多的,这个RemoteObjectFMS包其实也是在外面加了层包装,确保MXML直接使用和事件发送处理,完成了SharedObject的使用,这个包主要还是为了配合Cairngorm使用,没有Cairngorm,这个包将没有什么特别的意义,同时看了http://renaun.com/blog/中的RemoteObjectAMF0,就是上次发过的RemoteObjectAMF0包--针对Cairngorm中使用AMF0编码,升级包中加入支持标签直接写入method功能,挺管用的

不过链接Flash Media Server中是不是需要就值得斟酌了,毕竟NetConnection.client可以直接设置客户端回调函数,就是Responder

因为临近考试,所以NetStream方面就没有接着做了,不过按照SharedObject的方法,NetStream的也是很容易的

这个包中的Cairngorm是2.2.1,flex是flex3 beta3版本,包中三个文件夹src就是源代码,locale是为了满足Cairngorm的,如果新建flex project有报错,把Compiler Argument改成"-locale"就可以了,主要是CairngormMessageCodes.as这个文件的问题,fms application里面的直接复制到flash media server下的application就行了

目前有个问题就是:在asc中,sharedObject.setProperty(propertyName,null)不能把属性清除,我还没有弄清楚到底是什么原因,我以前的actionscript3 project这样做是可以清除的,所以调试的时候如果以前登陆过的信息还是记录在Application下的文件夹中的sharedObject中,如果谁知道麻烦告诉我

目前这个包中例子只是大致完成了功能,具体还有很多需要完成的,这个只是一个理想情况下的聊天应用而已

FlexFMS.zip

再次感谢http://renaun.com/blog/中的例子

 

If you want to connect flash media server in flex simply,it's nothing to say,for it likes actionscript3 project.In fact,I pack this RemoteObjectFMS with AbstractService,only to ensure we can use the mxml tags initialization.And so do in SharedObject.

For Cairngorm,I finish the RemoteObjectFMS,and thank renaun.He wrote RemoteObjectAMF0 and updata to ensure we can use method tag in MXML,if you want to see his work,you should go to his blog,and my blog has recorded his package

I don't use method tag in this sample,for if connect flash media server, I can get the handler by NetConnection.client,so the server call back will be handled in Responder

For my examination is coming, I don't finish the NetStream Function,but it's the same as SharedObject.Maybe easier.

The cairngorm version is 2.2.1, and my flex version is flex3 beta3,if you create the flex project with the error of locale.You should keep the locale folder with the src folder,and change the compiler arguments to "-locale".

At last,this sample is running in the ideal state.I don't have enough time to handle other Event,but I think the rpc package function is finished(Maybe I'm wrong again).

In the debug time,I found I can't clear the property of SharedObject by SharedObject.setProperty(propertyName,null) in asc file.In my actionscript3 project,I ensure I can clear them, but I don't think the platform is the reason,maybe ignore something.If you find it out,tell me,thanks.

In my opinion,I only wrote the function,and this rpc package should be updated in my free time.Now I must go into my books of civil engineering.

Good Luck & Have Fun! (Good Luck to me)

 

现在的已经修正掉了无法清楚SharedObject属性的问题了,是由于传参中的类型转换问题,新的版本在RemoteObjectFMS Package Fix Some Bugs

Now,I have fixed the bug that asc can't clear SharedObject Property, that is my problem as a fool, you can get the new demo in RemoteObjectFMS Package Fix Some Bugs

 

10 Tips For Working With Cairngorm

 

最好看看最后的那些回复,JesterXL对其中的解释比10条建议来得深刻

想想自己用的时候好多都为了偷懒没有做~~~

虽说不用太死板,不过设计上这样就是为了逻辑清晰,为了维护的方便,不能偷懒

这个是兑现以前的承诺,不断更新Cairngorm的资料

Cairngorm的一些资料

 

Good Luck & Have Fun

因为最近在Cairngorm用到了AMF0,找到renaum写的一个RemoteObjectAMF0包

地址http://renaun.com/flex2/CairngormAMFPHPExample/srcview/

打了个包上来

RemoteObjectAMF0.rar

之后是一个升级包,其实代码例子都有,加强了mothod标签定义

RemoteObjectAMF0Updata.zip

应对AMFPHP的AMF0编码已经很足够了,只是在Cairngorm升级到现在2.2.1后使用,因为RemoteObjectAMF0是继承于AbstractService,所以还是有警告的

 

如果想应用于Flash Media Server2,还有一个SharedObject的功能要加上去,还有就是NetConnection去connect Flash Media Server的事件要重新定义下再抛出到responder中处理

过几天放一份出来

目前有些解决方案是独立于Cairngorm的,其实跟as3中写差不多

Good Luck & Have Fun!

Cairngorm的一些资料

| No Comments | No TrackBacks

About this Archive

This page is an archive of recent entries in the Cairngorm category.

Find recent content on the main index or look in the archives to find all content.

3D Live Statistics