強勢三國卡版風頁游《五虎上將》----等你來戰
《五虎上將》神跡官網:點擊進入游戲
看著五虎上線了,說實話,心里還是有一絲竊喜,卻又一絲悲傷。
竊喜的是這也算是自己參與過的項目上線了,悲傷的是,這不是自己手把手從頭到尾一路走來的項目。
沒有那種一路風雨走過來的感覺。
話說,雖然自己不是從五虎從頭到尾跟過來的,但我確實從五虎中學到了許多, 特別是學到了 “如果我也這樣做,那結果就是現在這樣”。
它就像是一面鏡子,時刻讓自己反醒。
我并不是說五虎代碼差成什么樣,而是,這就是傳說中的“經驗”。恰巧,這些東西,被我悄悄地偷取了。
由于是后入五虎項目組的,所以我并不能參與五虎的功能部分開發。當然,這也是我所期望的。 我不想讓自己糾結于泥潭中無法抽身,又或者當我抽身后,
把別人陷入了泥潭中。
因此,我只能在資源加載,瀏覽器緩存,代碼規范上給予他們幫助。
在為五虎尋找解決方案的同時,另一個項目也在進行著, 一個教育類養成頁游項目。于是,我將所有的方案先應用于養成頁游中,經測試和優化完畢后,再投入五虎項目組。
下面是我研究和整理出來的一些方案,這些方案并不完美,甚至說僅僅是一些很常見的手法。于是,我大可公布于下,不必擔心任何糾葛。因為這并非是我個人所創的專利,也不是五虎項目所特有的東西,而是我在擁有蕓蕓眾生的網絡中擺渡,谷歌而來。同時,希望有志同道合的朋友能夠給我提出建議,相互交流,共同進步。
資源加載相關事項:
一、首要的任務,就是要將資源請求打包為一個隊列。 這樣外部需要加載多個資源時,就可以把隊列作為一個整體來進行事件監聽等。
二、其次就是資源的分類,資源至少可以分為三類, 一類是Modules.即FLEX中用來模塊化的東西,類似于C++中的DLL,(swc即類似于lib)。其次是ApplicationDomain.這多半是FLASH IDE編輯資源后的導出類。 最后就是純數據了, 如XML或者一些配置文件。 所以,需要將其分類,并能夠以一個很方便訪問的方式來管理。
三、Loading方式。 Loading方式大概也可以分為兩類, 一類是阻塞式,一類是非阻塞式。 阻塞式就是那種需要出現Loading條的方式,使用這種方式時,資源必須要完全加載完成后,才可以使用。如一些配置文件,UI組件的皮膚資源等。 非阻塞式就是不需要等待,而是在資源未加載完成時,統一采用一個顯示資源來替換。 比如一些圖標,或者RPG地圖中一些人物的顯示(許多游戲在人物未加載完成時,顯示一個球形)。
pureMVC使用注意事項:
一、pureMVC的使用應盡量標準,如果MVC使用得不標準,還不如不用。
二、盡量只在UI與業務邏輯通信時才使用pureMVC,邏輯與邏輯通信應當避免使用,否則會導致邏輯BUG的完全不可控。
模塊劃分注意事項:
一、游戲是一個巨大的項目,模塊劃分在所難免。 不論是否拆分為新工程,都必須明確規定各模塊代碼所能操作的權限,若權限過大,會導致無力維護,人走茶涼的現象。
二、若是采用Flex module進行模塊劃分, 若各Modules分開建立項目,則需要注意文件夾的層級,以及Modules編譯時相對主模塊的優化選項要開啟。
三、若將所有的Module依然放到一個項目里,則依然要注意文件夾的層級,規范各模塊代碼的操作權限,通信方式等。
UI方案:
一、Flex Button大小問題 若采用Flex Button并使用CSS Style方案,則要注意 對于 downSkin,若需要改變大小,則要保證其up down over狀態使用的皮膚都具有同樣的大小。(特別是FLASH IDE中導出元件的話,更要注意,僅僅將縮小后的元件錨點偏移,是會失真的,因為FLEX BUTTON只識別一個元件有效像素的包圍框作為元件尺寸。 可以新建一個透明層或者遮罩層來解決這個問題。
二、Button的特殊性 采用CSS使用FlexButton需要將Button各幀拆開。這涉及到美術工作量問題,所以,對于那種以圖片展現(即不需要在BUTTON上添加文本)的BUTTON,可以直接使用FLASH IDE導出SimpleButton并直接使用即可。 而對于那種需要動態修改文本的按鈕,采用CSS即可。
三、CSS文件的使用。 CSS的使用可以說極大地方便了UI的工作,其實就是將FLEX的UI換膚而已。 但是采用CSS文件方式并不適合我們。因為CSS文件的靜態和動態使用方式都會導致文件巨大。
靜態使用方式, 即<mx:Style source=”ooxx.css”/> 方式,這種方式會把 ooxx.css中所嵌入的資源都嵌入到嵌入ooxx.css樣式的SWF中來。
動態使用方式, 即將css編譯為swf 如 ooxx.swf 并用styleManager加載。 這個方案有一個好處,就是可以動態加載和卸載需要的CSS樣式。 看似天衣無縫的方案,卻有極大的弱點。 當你查看ooxx.swf的大小時,你會發現,就算你什么資源也沒嵌入,也會有300KB+的大小。 這是因為css本身是一個module.它會引入一個flex module所要import的符號。可惜,CSS編譯時,并不能指定針對某個主模塊進行優化。 我也曾嘗試將ooxx.css嵌入到一個module A.mxml中。并在編譯時針對主模塊進行優化,文件減小到了60+KB. 60+KB足夠一個公共UI庫的大小了。所以,CSS文件一定要慎用。
四、CSSStyleDeclaration與setStyle. 可以通過動態注冊CSS樣式來達到修改FLEX組件樣式的目的。 具體使用方法可以搜索這兩個關鍵字。 但是,在使用時,請先將所需要的資源載入。
五、TabNavigator 視情況而用。
六、可拖動窗口 并不一定要使用TitleWindow 若要使窗口可拖動,只需要將窗口startDrag()即可。 而對于許多窗口來說,我們想要實現的是點擊某個位置或者僅當點擊標題欄才拖動。 這個時候,我們可以添加一些透明的組件在這個窗口上,監聽這些透明的組件,并startDrag()窗口即可。
功能劃分:
一、不管是哪種游戲類型,都應該把場景和UI劃分清楚,就算是鼠標流的策略游戲,也是如此。 否則在邏輯功能上也會模糊不清。
二、游戲,永遠都有場景和UI,沒有PAGE。。。 這是頁游和網頁的本質區別。希望做網頁轉為做頁游的朋友能夠接受這個現實,轉變一下思路。
----------------------------------分割線-----------------------------------
瀏覽器緩存避免
瀏覽器緩存方案也是世人皆知的,我也僅簡單說一下。 更多內容,可以參考本BLOG中,瀏覽器緩存相關文章。
要想完成瀏覽器緩存避免需要弄清楚兩個事情 一、瀏覽器會緩存以URL全路徑方式緩存HTTP所請求的資源(js,html,swf,txt等等都可以)。 二、FLEX中的資源加載,是 HTTP請求方式。 也就是說, FLEX項目中加載的資源,都會被瀏覽器緩存, 這也是導致許多時候,游戲資源更新失敗的原因。
而要完全解決瀏覽器緩存問題,需要保證兩個東西 第一、主文件 (比如whsj.swf)更新正常。 第二、主文件所使用的資源(如 assets/loading.swf)更新正常 .
這里,我們要用到HTTP請求時的傳參功能 即在請求的資源URL后面加上?號 如 assets/loading.swf?v=1.0 。
在時行資源請求時,HTTP會忽略掉?號,以及以后的字符。 但瀏覽器緩存會緩存整個URL路徑。 并且在進行緩存訪問匹配時,也是采用的全路徑。 所以,我們可以在資源請求時,給每個資源加上一個版本號。
網上的一個兄弟說的采用SVN生成每一個資源的版本號方案確實很給力,但我認為實在很麻煩。于是,我們大可在請求每個資源時,加上游戲的發布版本號。 這樣,瀏覽器在進行資源緩存時,會將版本號信息一起緩存,當版本更新時,匹配則不會成功,從而解決了資源更新時,使用了舊資源的問題。
而最主要的,還是主文件的緩存, 因為就算你資源更新了, 但主文件沒更新, 那么,游戲功能就不會變。 當你采用舊版游戲功能與新版的服務器端通信時,自然會出現各種各樣的DOWN和黑屏。 因此, 主文件也要加版本號 如whsj_1_0.swf 而每次版本發布時,運營官網作相應的更改即可。
此方案也是目前我用在五虎項目上的初步方案。 對于主文件版本號的管理,許多公司的做法是加一個殼, 即做一個專門用于加載主文件的swf 它幾乎不會更改, 永遠都是采用隨機數或者時間戳讀取主文件版本號信息 如 version.xml?v=20111113,并使用 whsj.swf?v=1.0這樣的方式來加載主文件。 這在版本發布時,可以一層不變。僅修改版本號信息文件即可。 而版本號文件采用時間戳等方式讀取,可以保證每次都加載到最新的。
最后,祝賀一下二部項目天地劫即將測試。
天地劫神跡官網:點擊進入