WebGame方案彙總

強勢三國卡版風頁遊《五虎上將》----等你來戰

《五虎上將》神蹟官網:點擊進入遊戲

 

看着五虎上線了,說實話,心裏還是有一絲竊喜,卻又一絲悲傷。

竊喜的是這也算是自己參與過的項目上線了,悲傷的是,這不是自己手把手從頭到尾一路走來的項目。

沒有那種一路風雨走過來的感覺。

 

話說,雖然自己不是從五虎從頭到尾跟過來的,但我確實從五虎中學到了許多, 特別是學到了 “如果我也這樣做,那結果就是現在這樣”。

它就像是一面鏡子,時刻讓自己反醒。

我並不是說五虎代碼差成什麼樣,而是,這就是傳說中的“經驗”。恰巧,這些東西,被我悄悄地偷取了。

 

由於是後入五虎項目組的,所以我並不能參與五虎的功能部分開發。當然,這也是我所期望的。 我不想讓自己糾結於泥潭中無法抽身,又或者當我抽身後,

把別人陷入了泥潭中。

 

因此,我只能在資源加載,瀏覽器緩存,代碼規範上給予他們幫助。

在爲五虎尋找解決方案的同時,另一個項目也在進行着, 一個教育類養成頁遊項目。於是,我將所有的方案先應用於養成頁遊中,經測試和優化完畢後,再投入五虎項目組。

下面是我研究和整理出來的一些方案,這些方案並不完美,甚至說僅僅是一些很常見的手法。於是,我大可公佈於下,不必擔心任何糾葛。因爲這並非是我個人所創的專利,也不是五虎項目所特有的東西,而是我在擁有芸芸衆生的網絡中擺渡,谷歌而來。同時,希望有志同道合的朋友能夠給我提出建議,相互交流,共同進步。

資源加載相關事項:

一、首要的任務,就是要將資源請求打包爲一個隊列。 這樣外部需要加載多個資源時,就可以把隊列作爲一個整體來進行事件監聽等。

二、其次就是資源的分類,資源至少可以分爲三類, 一類是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這樣的方式來加載主文件。 這在版本發佈時,可以一層不變。僅修改版本號信息文件即可。 而版本號文件採用時間戳等方式讀取,可以保證每次都加載到最新的。

最後,祝賀一下二部項目天地劫即將測試

天地劫神蹟官網點擊進入

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章