flash 遊戲開發好後,一般都會放在很多個平台,比如國內的社交網站就很多,除非你就是做平台,否則很多你做完一個遊戲不會只扔一個平台,還有國外也有許多平台。
面對這麼些平台,會產生很多的差異,比如一個需要簡體中文,一個需要繁體,另一個是日語或者英語。這個時候還是比較簡單,弄一個語言檔案就ok了,比如zh-cn.xml,en-us.xml , zh-tw.xml。
但是有的時候就不是這麼簡單了。
可能在A平台,你需要放出商品 sA,而在B平台則不能放該商品,這個時候你可能在sA上有一個標記:buyable=true,兩個平台的屬性值不同,以控制該物品是否能購買。
可能在A平台,你要做一個活動,而B平台不動,做活動肯定會有一些新的或者特有的東西放上吧。那麼A平台的config應該與眾不同。
這是一種很好的解決辦法,不同的平台配置不同的config。
但是如果你僅僅這麼做了。那麼麻煩來了。
你一個平台一份config。通常這個config是非常大的。基本說有可變的:商品,資源,地圖,任務,技能,怪物……。幾乎儘可能的都寫在設定檔裡,因為設定檔就是幹這個事的。
當一個如此大又如此複雜更如此重要的檔案,維護,修改怎麼控制呢?一個好說,5個,10個?咱們都是程式,不是小秘書,及時小秘書也有失手的時候,悲了個劇吧。
有一些更新,是所有的config都需要改變,有一些更新是部分config需要改變。有一些……,總之,真是一件麻煩是。
我們使用的xml作為設定檔。不知大家使用什麼。
這個時候很容易想到繼承,對,就是平時寫的最多的 extend,就像 movieclipe extends sprite一樣的繼承。這樣寫一個公用的config,然後每一個平台都繼承於這個平台。
如果所有平台都需要的改變,我們放在父親config裡,如果單個平台,我們單個子config。最後合并產生最終的完整config。
xml也可以繼承嗎?不能。
在這裡,你可以做一個簡單的設計,他就能繼承了。
呵呵。遍曆兩次不久行了嗎。。
寫一個指令碼,讀取父親的config。然後再讀取目標平台的特殊config,遍曆子config,如果common裡頭存在子config的配置,那麼就替換掉父親的屬性,如果父親不存在,那麼就直接添加進去。最後這個根據父親和目標config產生出來的就是你要的xml。
原理就是這麼簡單。當然期間需要涉及到每個xml的element都需要有一個id,否則上面所說的遍曆就很難做到了。
如果要做的更好,你這個邏輯應該支援多層合并,比如common->zh->renren,qq,kaixin,taobao,sina.看啊,這些平台都繼承於zh這個父親,因為他們都是中國平台,比如中國有自己的特殊節日,這樣你的改動就只需要在zh這個config上做處理,其他平台都繼承他,也就繼承得到了更新。
我用檔案夾作為一個“class”|類別:
common就是所謂的parent,others下是所有的目標config,當然others這個目錄是不參與這層邏輯的。
這是common下的結構。我把config應該有的一級child都分開成一個一個獨立的xml。這樣更方便合并和管理。(起碼合并的時候少一層遍曆吧)
在other下方的是按照各個平台的名字命名的檔案夾。是檔案夾哦。然後檔案夾下放著的就是需要覆蓋的父類屬性的各個xml。
如果不需要覆蓋任何東西,也需要建立一個空的檔案夾,否則不會產生了。因為我是根據檔案夾來產生的。
如果版本控制用的是svn1.7一下的需要過濾一下//.svn 檔案夾。版本1.7後就不存在這種情況
至於指令碼,我是用python寫的。不管你用什麼語言,做什麼程式,python這個東西還是很好的。效率。。。
不知道大家在這方有沒有更好的方式,可以一起交流交流。有什麼改進或者建議歡迎指正。。