【步兵 經驗篇】工廠模式 in Game by EOS.
最近在看《Effective Java中文版 第2版》,密碼 968n,雖然是java的,
但是講的很有深度,是不錯的一本書,而且語言直接是都是相通的。
可以看一下java基礎,寫點小demo熟悉一下,然後再看看此書。
說了辣麼多,然而還是用lua講=、=,腳本寫起來就是方便
舉個栗子
GameElement = {
Player = 1, --玩家
Monster = 2, --怪
NPC = 3, --NPC
Text = 4, --傷害、暴擊等
Effect = 5, --特效
Collect = 6, --採集物
Drop = 7, --掉落物品
Shadow = 8, --陰影(可單獨拿出來做優化)
--當然也可以直接用屬性字典{type, id, model, name, ...}
new = function(elementType, id)
local ret = GameElement.get(elementType, id)
if ret then return ret end
if elementType == GameElement.Player then
ret = PlayerElement.new(id)
elseif elementType == GameElement.Monster then
ret = MonsterElement.new(id)
--其他省略
end
--根據不同類型放入不同的表,例如
--ElementMgr[GameElement.Player] = {}
Mgr.ElementMgr.addElemet(ret.getType(), ret)
return ret
end,
get = function(elementType, id)
return Mgr.ElementMgr.getElemet(elementType, id)
end,
kill = function(elementType, id)
--清除指定類型,指定id
end,
killById = function(id)
--清除所有類型,指定id
end,
clearByType = function(elementType)
--清除指定類型,全部id
end,
------------以上三個方法可以統一調用 Element:killed()--------------
}
local player = GameElement.new(GameElement.Player, serverId)
--player:該幹啥幹啥
local oldPlayer = GameElement.get(GameElement.Player, serverId)
像這樣 通過統一接口,來生成不同的數據,而且隱藏了內部的函數複雜的邏輯,
降低了耦合,讓代碼看上去更加 統一和簡介,而且也方便管理。
代碼管理
這裏說的不是代碼的版本控制,而是單單隻代碼或者說代碼邏輯的管理。
(ps:我的項目是用svn+雲盤來管理的,git什麼好麻煩,還是svn人性化)
寫代碼寫的越久,就會越發現,對代碼的掌控力很重要,能夠快速的定位到代碼,
而且直觀的管理數據,對項目而言,可能比運行效率更加重要。
當然這樣對開發的效率和代碼的維護都是有意的。
(ps:當然代碼寫太爛的,該練還是要練,不要害怕重構。一時費事,可能受益良久,
比如戳中了你的某根弦,刷的一下就覺得寫代碼信手拈來=、=)
結語
想提過代碼水平,代碼量是必不可少的,包括寫和讀。
看別人的代碼,學的是最快的,但是不寫過是不會發現什麼缺陷,
或者是不清楚在什麼地方用什麼樣的方式,來管理代碼。
比如最近的項目,事件驅動雖然是不錯的方式,但是什麼東西都用事件來寫,
就感覺整個邏輯變成了蜘蛛網,縱橫交錯。(噁心乾嘔,這是慢性咽炎的症狀)
比如ui。直接UIMgr:show、hide、close之類來控制界面不就好了麼,
非要,註冊個Listener,來監聽OpenXXLayer事件,然後這fire一下,
那fire一下,然後那麼多界面在一起就是 fire fire fire ,突突突~啊~ 突突突~
this is a war (捂臉 流淚.gif)
希望大家能寫多看代碼,多多交流,不要在摸黑的路上越走越遠~
可以加羣交流,羣號左上角~
See Again~
之前
真愛無價,歡迎打賞~