六度拓扑(www.6dtop.com)正式开源啦~~~(V1.0)
生活随笔
收集整理的這篇文章主要介紹了
六度拓扑(www.6dtop.com)正式开源啦~~~(V1.0)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
序
歡迎各位朋友對六度拓?fù)涞南矏?#xff0c;六度拓?fù)鋺?yīng)該算是我互聯(lián)網(wǎng)實(shí)驗(yàn)中第一個稱得上成熟的作品。
無論從構(gòu)思,還是到創(chuàng)作的過程,直到最后的產(chǎn)品,我都是很滿意的。
當(dāng)然,最先要感謝還是豆瓣網(wǎng)能放出這個通過ID來查找朋友的API,沒有這個API就沒有這個作品。
那么大的一個網(wǎng)站,用自己服務(wù)器和帶寬把API開放出來供大家使用,這種奉獻(xiàn)的精神本身就很值得稱道,所以,我覺得放出自己的源代碼是很應(yīng)該的事,而且,其中也一定會有很多的好處。
我在大學(xué)時代讀過Linus Torvalds 自傳<樂者為王>,我不敢奢談自己的編程水平有多高,但我和Linus Torvalds 一樣,都對編程活動充滿熱情。對我而言,程序設(shè)計(jì)最大的樂趣就在于創(chuàng)作,這和歌手寫歌,作家寫文章從某種程度上是具有一致性,最終的作品是否能得到大家的認(rèn)可,將是我最大的頎慰。
我喜歡李宗盛大哥的一句話:“一把琴,在它交在一個音樂人手中之前,基本上是個廢物,它一定要落在一個做音樂的人手中,它才有了生命。”-----與所有喜歡創(chuàng)作的朋友共勉。
-------------------------------------------------------------------
好,書歸正傳,讓我們說說代碼吧:
1.首先要說的是關(guān)于程序編譯環(huán)境,程序是用flash cs3編譯的,雖然里面有一此看上去和flex有關(guān)的文件,但那只是我用flex作為編輯器所產(chǎn)生的"副產(chǎn)品",我采用開發(fā)方式是flash作為編譯器和界面設(shè)計(jì)工具,而flex作為代碼編輯器。
flash cs3 下載地址
至于flash所采用的開發(fā)語言------ActionScript 3,如果你學(xué)過像JAVA,C++這樣的OOP語言,從語法能很輕松的理解。
2.程序之核心
2.1
程序最重要的一個部分就是"軌道",參UIEntity.Orbit類
軌道圖示
從圖中,可以看出,結(jié)點(diǎn)是被一個吸引到軌道上去的。
而軌道的吸引是分階段,第一階是RANDOM_ATTRACT,第二階段是ARRANGE。
RANDOM_ATTRACT :由于在二度及以上的朋友中,無法在搜索完成某度的所有朋友前,獲知其朋友的數(shù)目,因此,為了讓頭像可以盡可能的均勻排列,需要根據(jù)當(dāng)前已搜索的某度朋友的數(shù)目來進(jìn)行,這個階段稱為RANDOM_ATTRACT。
ARRANGE:這個階段就很清楚了,某個朋友的某度朋友全部完成時,讓其朋友盡可能的均勻排列。
軌道的實(shí)現(xiàn)用的是DFA(有限自動機(jī)),其實(shí)我這里的實(shí)現(xiàn)是很簡單的,就是在一個可以被反復(fù)執(zhí)行的函數(shù),如foo中,加swith(status)這樣的語句,GOT IT?
DFA是我在交互應(yīng)用中非常喜歡用的東西,我對它喜歡的不得了,他真是個既簡單,又有效的思想。
如果我說程序的核心就這點(diǎn)的話,肯定有人要扔蕃茄了,但事實(shí)就是這樣,這個就是程序之核心,當(dāng)然,實(shí)現(xiàn)這個核心的某些細(xì)節(jié)還是很值得討論下的。
2.2Orbit吸引之實(shí)現(xiàn)
Orbit自己只負(fù)責(zé)完成吸引的動作,但由誰負(fù)責(zé)把結(jié)點(diǎn)push進(jìn)某個orbit呢?這就需要由另一個自動機(jī)來做,參看DouBanFriendTopology類(主類)中的
enterFrameFun(evt:Event):void函數(shù)的實(shí)現(xiàn)
它的基本思想是這樣的,將當(dāng)前中心點(diǎn)的一度用戶裝入一個隊(duì)列中,
然后,每隔50ms左右(出于性能考慮),從隊(duì)列(參AS3STL.EQueue)Q的頭部取出一個用戶F->
查看用戶F的朋友是否已全部獲取(由于豆瓣朋友的XML一次只能請求50個,所以當(dāng)朋友大于50時,要多次請求)。
YES 全部獲取 : 把用戶F用隊(duì)列Q里取出,查看它的所有朋友結(jié)點(diǎn)。
IF 朋友結(jié)點(diǎn)i未被使用
加入隊(duì)列Q的尾部
ELSE 直接丟棄此結(jié)點(diǎn),這里為了 避免重復(fù)結(jié)點(diǎn),
如a-b是好友,b-c是好友,而c-a又是好友
NO 未全部獲取: 等待
這是一個很簡單但很有效的算法,不是嗎?
因?yàn)檫@里,只要不停止抓取,用戶的朋友,朋友的朋友...是會一直獲取(抓取的過程參 DouBanFriendTopology類中的ClawMainFun(event:TimerEvent):void )下去的,也就是說,隊(duì)列是無限延伸(除非把N度朋友全抓完或到某度時所有人都沒有朋友了),對于這樣一種動態(tài)的數(shù)據(jù)的情況,本來是很麻煩的,但這里用一個 "查看用戶F的朋友是否已全部獲取"就優(yōu)雅的處理了這一情況,個人對此頗為滿意。
3OK,關(guān)鍵的部分就先介紹到這里了,先講講程序的組織:
Douban_Fri_Topology.fla 程序主文件,編輯它即可觀看6度拓?fù)洹?br />DouBanFriendTopology.as 程序的主類。
OriginalGraph.fla 程序的原型圖所在文件,用于先期設(shè)計(jì)。
about.swf 點(diǎn)擊About后播放的flash文件,里面用到了我最喜歡的美國選秀結(jié)目<學(xué)徒>的背景音 樂。(第一幀被設(shè)為暫停了,要通 過程序控制播放)
------------------------------------------------------------------
包
AS3STL
自寫的AS3 STL包,目前僅有一個隊(duì)列(以前有一個較全的 AS2STL,有stack,tree,graph啥的,過一陣改寫)。
ComuEntity
通訊實(shí)體類,用來請求XML,并返回相應(yīng)結(jié)果,
Fetch_Friend.as是用來獲取朋友數(shù)據(jù)的。
而Fetch_People.as則是在搜索時用來獲取個人信息(ID)的,主要用在如http://www.6dtop.com/search.asp?id=ahbei上。
EventCenter
CEventCenter, 這是一種形之有效的自寫消息的機(jī)制,當(dāng)你從一個“深處”,比方說obj1.obj2.obj3.xxx發(fā)出一個消息給obj100,通過這樣一種直接管理 -派發(fā)的機(jī)制,有效的解決了這個問題,無論語言是否帶什么dispatch之類的自定義消息機(jī)制,都可以用這種基于函數(shù)實(shí)現(xiàn)的消息來做。
CGData
用來存放一些全局?jǐn)?shù)據(jù),UserList是一個全局的異質(zhì)(就是不會有重復(fù)的)用戶列表。
Model
用來定義一些僅和數(shù)據(jù)相關(guān)的模型,如這里的UserModel.
UIEffect
效果包,DragEffectVM是我非常頎常的一個自寫鼠標(biāo)拖動管理類,他帶來了非常高的便捷性和靈活性。
UIEntity
UI 實(shí)體包,其中的Orbit(軌道)和UserNode(用戶結(jié)點(diǎn))最為重要,而ToolBar中包括了ScaleToolBar(左側(cè)形變工具), Upline(上部工具),ButtomLine(下部工具),這里用到了在flash制作的一些元件,在FLEX里由于無法識別,會報(bào)錯(由于沒有編譯 成.swc),不用理會,因?yàn)檫@里是用flash進(jìn)行編譯的。
Utils
實(shí)用類包,ArrayUtil,數(shù)組輔助方法。
WebService
WebService包,SWebService,包含了請求的地址等。
------------------------------------------------------------------
about_swf文件夾,包含了about flash的源文件。
由于about.swf第一幀被設(shè)為了暫停,所以,可以使用loader.swf
------------------------------------------------------------------
說了大半天,終于來點(diǎn)實(shí)惠的了,6DTOP 源碼1.0版本,跟大家分享了
http://www.6dtop.com/open/v1.0/6dtop.source.1.0.rar
好貼要記得頂噢;)
歡迎各位朋友對六度拓?fù)涞南矏?#xff0c;六度拓?fù)鋺?yīng)該算是我互聯(lián)網(wǎng)實(shí)驗(yàn)中第一個稱得上成熟的作品。
無論從構(gòu)思,還是到創(chuàng)作的過程,直到最后的產(chǎn)品,我都是很滿意的。
當(dāng)然,最先要感謝還是豆瓣網(wǎng)能放出這個通過ID來查找朋友的API,沒有這個API就沒有這個作品。
那么大的一個網(wǎng)站,用自己服務(wù)器和帶寬把API開放出來供大家使用,這種奉獻(xiàn)的精神本身就很值得稱道,所以,我覺得放出自己的源代碼是很應(yīng)該的事,而且,其中也一定會有很多的好處。
我在大學(xué)時代讀過Linus Torvalds 自傳<樂者為王>,我不敢奢談自己的編程水平有多高,但我和Linus Torvalds 一樣,都對編程活動充滿熱情。對我而言,程序設(shè)計(jì)最大的樂趣就在于創(chuàng)作,這和歌手寫歌,作家寫文章從某種程度上是具有一致性,最終的作品是否能得到大家的認(rèn)可,將是我最大的頎慰。
我喜歡李宗盛大哥的一句話:“一把琴,在它交在一個音樂人手中之前,基本上是個廢物,它一定要落在一個做音樂的人手中,它才有了生命。”-----與所有喜歡創(chuàng)作的朋友共勉。
-------------------------------------------------------------------
好,書歸正傳,讓我們說說代碼吧:
1.首先要說的是關(guān)于程序編譯環(huán)境,程序是用flash cs3編譯的,雖然里面有一此看上去和flex有關(guān)的文件,但那只是我用flex作為編輯器所產(chǎn)生的"副產(chǎn)品",我采用開發(fā)方式是flash作為編譯器和界面設(shè)計(jì)工具,而flex作為代碼編輯器。
flash cs3 下載地址
至于flash所采用的開發(fā)語言------ActionScript 3,如果你學(xué)過像JAVA,C++這樣的OOP語言,從語法能很輕松的理解。
2.程序之核心
2.1
程序最重要的一個部分就是"軌道",參UIEntity.Orbit類
軌道圖示
從圖中,可以看出,結(jié)點(diǎn)是被一個吸引到軌道上去的。
而軌道的吸引是分階段,第一階是RANDOM_ATTRACT,第二階段是ARRANGE。
RANDOM_ATTRACT :由于在二度及以上的朋友中,無法在搜索完成某度的所有朋友前,獲知其朋友的數(shù)目,因此,為了讓頭像可以盡可能的均勻排列,需要根據(jù)當(dāng)前已搜索的某度朋友的數(shù)目來進(jìn)行,這個階段稱為RANDOM_ATTRACT。
ARRANGE:這個階段就很清楚了,某個朋友的某度朋友全部完成時,讓其朋友盡可能的均勻排列。
軌道的實(shí)現(xiàn)用的是DFA(有限自動機(jī)),其實(shí)我這里的實(shí)現(xiàn)是很簡單的,就是在一個可以被反復(fù)執(zhí)行的函數(shù),如foo中,加swith(status)這樣的語句,GOT IT?
DFA是我在交互應(yīng)用中非常喜歡用的東西,我對它喜歡的不得了,他真是個既簡單,又有效的思想。
如果我說程序的核心就這點(diǎn)的話,肯定有人要扔蕃茄了,但事實(shí)就是這樣,這個就是程序之核心,當(dāng)然,實(shí)現(xiàn)這個核心的某些細(xì)節(jié)還是很值得討論下的。
2.2Orbit吸引之實(shí)現(xiàn)
Orbit自己只負(fù)責(zé)完成吸引的動作,但由誰負(fù)責(zé)把結(jié)點(diǎn)push進(jìn)某個orbit呢?這就需要由另一個自動機(jī)來做,參看DouBanFriendTopology類(主類)中的
enterFrameFun(evt:Event):void函數(shù)的實(shí)現(xiàn)
它的基本思想是這樣的,將當(dāng)前中心點(diǎn)的一度用戶裝入一個隊(duì)列中,
然后,每隔50ms左右(出于性能考慮),從隊(duì)列(參AS3STL.EQueue)Q的頭部取出一個用戶F->
查看用戶F的朋友是否已全部獲取(由于豆瓣朋友的XML一次只能請求50個,所以當(dāng)朋友大于50時,要多次請求)。
YES 全部獲取 : 把用戶F用隊(duì)列Q里取出,查看它的所有朋友結(jié)點(diǎn)。
IF 朋友結(jié)點(diǎn)i未被使用
加入隊(duì)列Q的尾部
ELSE 直接丟棄此結(jié)點(diǎn),這里為了 避免重復(fù)結(jié)點(diǎn),
如a-b是好友,b-c是好友,而c-a又是好友
NO 未全部獲取: 等待
這是一個很簡單但很有效的算法,不是嗎?
因?yàn)檫@里,只要不停止抓取,用戶的朋友,朋友的朋友...是會一直獲取(抓取的過程參 DouBanFriendTopology類中的ClawMainFun(event:TimerEvent):void )下去的,也就是說,隊(duì)列是無限延伸(除非把N度朋友全抓完或到某度時所有人都沒有朋友了),對于這樣一種動態(tài)的數(shù)據(jù)的情況,本來是很麻煩的,但這里用一個 "查看用戶F的朋友是否已全部獲取"就優(yōu)雅的處理了這一情況,個人對此頗為滿意。
3OK,關(guān)鍵的部分就先介紹到這里了,先講講程序的組織:
Douban_Fri_Topology.fla 程序主文件,編輯它即可觀看6度拓?fù)洹?br />DouBanFriendTopology.as 程序的主類。
OriginalGraph.fla 程序的原型圖所在文件,用于先期設(shè)計(jì)。
about.swf 點(diǎn)擊About后播放的flash文件,里面用到了我最喜歡的美國選秀結(jié)目<學(xué)徒>的背景音 樂。(第一幀被設(shè)為暫停了,要通 過程序控制播放)
------------------------------------------------------------------
包
AS3STL
自寫的AS3 STL包,目前僅有一個隊(duì)列(以前有一個較全的 AS2STL,有stack,tree,graph啥的,過一陣改寫)。
ComuEntity
通訊實(shí)體類,用來請求XML,并返回相應(yīng)結(jié)果,
Fetch_Friend.as是用來獲取朋友數(shù)據(jù)的。
而Fetch_People.as則是在搜索時用來獲取個人信息(ID)的,主要用在如http://www.6dtop.com/search.asp?id=ahbei上。
EventCenter
CEventCenter, 這是一種形之有效的自寫消息的機(jī)制,當(dāng)你從一個“深處”,比方說obj1.obj2.obj3.xxx發(fā)出一個消息給obj100,通過這樣一種直接管理 -派發(fā)的機(jī)制,有效的解決了這個問題,無論語言是否帶什么dispatch之類的自定義消息機(jī)制,都可以用這種基于函數(shù)實(shí)現(xiàn)的消息來做。
CGData
用來存放一些全局?jǐn)?shù)據(jù),UserList是一個全局的異質(zhì)(就是不會有重復(fù)的)用戶列表。
Model
用來定義一些僅和數(shù)據(jù)相關(guān)的模型,如這里的UserModel.
UIEffect
效果包,DragEffectVM是我非常頎常的一個自寫鼠標(biāo)拖動管理類,他帶來了非常高的便捷性和靈活性。
UIEntity
UI 實(shí)體包,其中的Orbit(軌道)和UserNode(用戶結(jié)點(diǎn))最為重要,而ToolBar中包括了ScaleToolBar(左側(cè)形變工具), Upline(上部工具),ButtomLine(下部工具),這里用到了在flash制作的一些元件,在FLEX里由于無法識別,會報(bào)錯(由于沒有編譯 成.swc),不用理會,因?yàn)檫@里是用flash進(jìn)行編譯的。
Utils
實(shí)用類包,ArrayUtil,數(shù)組輔助方法。
WebService
WebService包,SWebService,包含了請求的地址等。
------------------------------------------------------------------
about_swf文件夾,包含了about flash的源文件。
由于about.swf第一幀被設(shè)為了暫停,所以,可以使用loader.swf
------------------------------------------------------------------
說了大半天,終于來點(diǎn)實(shí)惠的了,6DTOP 源碼1.0版本,跟大家分享了
http://www.6dtop.com/open/v1.0/6dtop.source.1.0.rar
好貼要記得頂噢;)
總結(jié)
以上是生活随笔為你收集整理的六度拓扑(www.6dtop.com)正式开源啦~~~(V1.0)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tomcat输出框乱码(鏈嶅姟鍣ㄥ湪[4
- 下一篇: 梦行扫码付(收银台条码支付 微信钱包条码