準(zhǔn)備為自己的2D游戲動(dòng)畫系統(tǒng)選擇一套給外部使用的接口方式,有如下幾種選擇:
1. 純C API方式導(dǎo)出,類似于Windows API方式
優(yōu)點(diǎn):簡(jiǎn)潔,可以供C/C#乃至其他可以導(dǎo)入C DLL的語(yǔ)言使用
缺點(diǎn):C++的系統(tǒng)轉(zhuǎn)化為C會(huì)遇到很多性能以及架構(gòu)的折損,對(duì)于對(duì)象控制類功能導(dǎo)出比較多的系統(tǒng),這種方式簡(jiǎn)直是噩夢(mèng)
2. C++方式導(dǎo)出,宏方式實(shí)現(xiàn)RTTI以及C++反射系統(tǒng)
優(yōu)點(diǎn):強(qiáng)大,易用。
缺點(diǎn):對(duì)象生命周期不容易控制,反射系統(tǒng)設(shè)計(jì)比較費(fèi)時(shí),可能暴露很多類的細(xì)節(jié),只能給C++使用
3. COM方式,類DirectX的接口方式
優(yōu)點(diǎn):商業(yè)項(xiàng)目已經(jīng)證明這種接口方式的強(qiáng)大地方。無(wú)論是多個(gè)對(duì)象的類功能導(dǎo)出,還是COM接口重載都非常方便。而且,可以極為容易的讓.NET訪問(wèn)。XBOX SDK里的XUI就是采用這種方式,而且還設(shè)計(jì)了一套C API搭配的強(qiáng)大C++反射系統(tǒng),支持動(dòng)態(tài)類創(chuàng)建,RTTI,動(dòng)態(tài)類型轉(zhuǎn)換等等。
缺點(diǎn):需要系統(tǒng)注冊(cè),不能跨平臺(tái)。COM標(biāo)準(zhǔn)學(xué)習(xí)起來(lái)需要時(shí)間
4. 腳本綁定
優(yōu)點(diǎn):保持你的系統(tǒng)對(duì)外C/C++接口的干凈,簡(jiǎn)潔。通過(guò)腳本類綁定,可以很快的將C++功能注冊(cè)到腳本中。
缺點(diǎn):腳本如果沒(méi)有調(diào)試器,將會(huì)讓開(kāi)發(fā)中碰到的棘手問(wèn)題,甚至于在后期維護(hù)系統(tǒng)以及系統(tǒng)架構(gòu)大變動(dòng)變得異常復(fù)雜。腳本的性能決定了不能讓其做實(shí)時(shí)處理,例如:渲染
最終選擇下來(lái),由于有自己的界面系統(tǒng)Motion使用lua的函數(shù)綁定的前例,因此還是決定選擇一款腳本語(yǔ)言來(lái)做系統(tǒng)的對(duì)外接口,這里有幾個(gè)選擇:
1. Lua
可以說(shuō)最好的游戲系統(tǒng)腳本語(yǔ)言。穩(wěn)定,高效,bug幾乎沒(méi)有(即便有,普通開(kāi)發(fā)者也是很難察覺(jué)的)。配上LuaPlus的強(qiáng)大C++綁定系統(tǒng),你的系統(tǒng)開(kāi)發(fā)效率可以提高很多。這里推薦notepad++來(lái)做lua開(kāi)發(fā),稍微配置下,彈出提示給你感覺(jué)在使用Visual Studio,:)
同時(shí)需要指出的是,lua的類功能確實(shí)比較弱。雖然可以用metatable方式來(lái)模擬。但逼近跟native class支持還差很遠(yuǎn),實(shí)際開(kāi)發(fā)中,你能體會(huì)出class中的權(quán)限控制(private,protected)有多么重要。
2. Python
誠(chéng)然,這是個(gè)最OO的腳本。但是對(duì)于游戲,它太慢了。雖然本人只是用python寫過(guò)一些build系統(tǒng),但從很多朋友反應(yīng)的情況來(lái)看,Python嵌入游戲系統(tǒng),確實(shí)太慢。用Stackless Python? 用第三方開(kāi)源產(chǎn)品,還是認(rèn)準(zhǔn)品牌,呵呵,這里如果有用過(guò)的同學(xué),歡迎提供感受。
3. C#
語(yǔ)言和系統(tǒng)都很美,但是想嵌入游戲,還是很痛的。.net平臺(tái)可惜就在于,到現(xiàn)在為止,可能還不是所有機(jī)器默認(rèn)安裝有.net平臺(tái)。如果你的游戲是C++寫成,但卻要安裝.net以便你的腳本能運(yùn)行,這很奇怪吧?所以,如果要用C#,還不如不用腳本,全盤.net就好了。Managed DX? 那東西幾年前就被MS打入冷宮了。XNA? 那東西只是一個(gè)玩具,別摸。
4.Squirrel松鼠腳本
這是個(gè)好東西。類lua的語(yǔ)法,C/C++/Java的語(yǔ)言結(jié)構(gòu),純正的native class外加OO支持。擁有開(kāi)源的C++類綁定系統(tǒng)。最爽的是,SQDEV支持日食(Eclipse)下的遠(yuǎn)程調(diào)試,開(kāi)發(fā)環(huán)境還支持動(dòng)態(tài)語(yǔ)法檢查。oh,my god。還說(shuō)不定哪天這腳本被MS招安,跟IronPython一樣弄個(gè).net綁定。
