在開(kāi)發(fā)完一個(gè)游戲后,看了一些文章和當(dāng)前一些流行的技術(shù)后,感觸頗深,所以隨筆聊聊。
游戲服務(wù)器的設(shè)計(jì)比較復(fù)雜,這里也不打算寫(xiě)出每個(gè)細(xì)節(jié),只是講一下框架方面的想法。
1、實(shí)體系統(tǒng)和功能子系統(tǒng)
在服務(wù)器的框架部分,主要寫(xiě)些基本的服務(wù)器功能模塊,可以實(shí)現(xiàn)一個(gè)實(shí)體系統(tǒng),游戲中的實(shí)體主要指那些生物對(duì)象,如角色,怪物,NPC等,其實(shí)在游戲中沒(méi)有必要寫(xiě)具體的角色類(lèi),怪物類(lèi),NPC類(lèi),我們可以將他們統(tǒng)稱(chēng)為實(shí)體,從游戲服務(wù)器的角度看,他們沒(méi)有什么不同,當(dāng)策劃將這些實(shí)體對(duì)象進(jìn)行配置后就成了具有類(lèi)型差異的各種各樣的對(duì)象,如角色,怪物。功能子系統(tǒng)指MMORPG游戲中一些必不可少的相對(duì)獨(dú)立的功能集,如運(yùn)動(dòng)系統(tǒng),財(cái)產(chǎn)系統(tǒng),社交系統(tǒng),聲望系統(tǒng)等,每個(gè)實(shí)體具有自己的屬性集,一些功能子系統(tǒng),一些特性集(決定了生物的類(lèi)型),這些屬性集、特性集和子系統(tǒng)可依賴(lài)配置文件進(jìn)行配置。這樣的好處是不會(huì)存在通過(guò)實(shí)現(xiàn)各種對(duì)象的類(lèi)來(lái)人為的增大類(lèi)結(jié)構(gòu)的復(fù)雜性,通過(guò)具體的類(lèi)(或繼承類(lèi))實(shí)現(xiàn)各種生物甚至有時(shí)候會(huì)存在沖突,因?yàn)橛械膶?duì)象既是A類(lèi)型又是B類(lèi)型。
2、基于服務(wù)的構(gòu)建思想
游戲服務(wù)器除了上面的實(shí)體和子系統(tǒng)外,其他有好多東西可以借鑒現(xiàn)在的SOA思想,如聊天系統(tǒng),好友系統(tǒng),師徒系統(tǒng)等是否都可以看作是一種游戲服務(wù)呢?當(dāng)開(kāi)啟了這些服務(wù),那么相應(yīng)的功能就能表現(xiàn),關(guān)閉則隱藏。
3、封閉的數(shù)據(jù)管理層
服務(wù)器的數(shù)據(jù)管理比較復(fù)雜,如果我們講所有(或大部分)的數(shù)據(jù)交由一個(gè)獨(dú)立的數(shù)據(jù)管理層進(jìn)行管理,那么上層開(kāi)發(fā)人員或者上層應(yīng)用模塊就不直接關(guān)心數(shù)據(jù)在哪個(gè)地方,怎么更新,怎么存儲(chǔ)等。基于前面的實(shí)體系統(tǒng),整個(gè)服務(wù)器的程序架構(gòu)已經(jīng)比較抽象,在這個(gè)抽象的類(lèi)對(duì)象的基礎(chǔ)上構(gòu)建封閉的數(shù)據(jù)管理應(yīng)該比散亂的大量不同對(duì)象的系統(tǒng)中構(gòu)建數(shù)據(jù)管理層來(lái)得更方便,比如實(shí)體對(duì)象的屬性集,基本可以涵蓋一個(gè)實(shí)體對(duì)象大部分的數(shù)據(jù),那么數(shù)據(jù)管理層只要管好屬性集就可以帶來(lái)不少的方便,而屬性集中的大部分屬性是通過(guò)配置而來(lái)的(至少很多需持久化的屬性肯定是配置的),除了實(shí)體系統(tǒng)的數(shù)據(jù),還有那些子系統(tǒng)和基于服務(wù)的那些對(duì)象都可以納入數(shù)據(jù)管理層進(jìn)行管理。
4、腳本化支持
對(duì)于游戲服務(wù)器那些核心的模塊,通過(guò)腳本封裝(如Lua封裝)后,可以讓上層應(yīng)用層進(jìn)行很好的擴(kuò)展和開(kāi)發(fā),所以游戲服務(wù)器應(yīng)該也必須支持腳本編程。像那些AI,任務(wù),聊天等等大多數(shù)應(yīng)用模塊中的大部分代碼都是可以拿腳本編寫(xiě)的??紤]到腳本性能問(wèn)題,一些對(duì)性能影響比較大的地方還是建議用c/c++實(shí)現(xiàn),腳本里面進(jìn)行調(diào)控即可。
還有一些亂七八糟的東西,考慮到怕不小心泄密,這里就不多講了。