posts - 4,comments - 15,trackbacks - 0
          <2007年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(5)

          隨筆分類(4)

          隨筆檔案(4)

          搜索

          •  

          積分與排名

          • 積分 - 5607
          • 排名 - 2981

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

          今天開始進(jìn)行新項(xiàng)目的預(yù)研,有關(guān)游戲引擎的腳本系統(tǒng)。之前自己對Python有所了解,但也僅僅限于應(yīng)用層,如今要把一個腳本系統(tǒng)加入到游戲引擎里面,一時還有點(diǎn)不知道如何下手。趕緊上網(wǎng)查資料,逛了大半天的gamedev,現(xiàn)在總算有點(diǎn)眉目了。
          首先要明確的是腳本系統(tǒng)在游戲引擎中扮演什么樣的角色。

          腳本系統(tǒng)的必要性

          游戲作為上層應(yīng)用程序,是在游戲引擎的基礎(chǔ)上運(yùn)行的,現(xiàn)在游戲的發(fā)展趨勢來看,游戲者(gamer)對游戲的可自我配置性有非常高的需求,特別是在游戲運(yùn)行時的自我配置,已經(jīng)不能通過簡單的傳參數(shù)來完成這種配置。所以,整個游戲的架構(gòu)有分成兩大塊的發(fā)展趨勢。一塊是kernel,另一塊是configuration。Kernel是游戲的基礎(chǔ)類&Object的集合,而configuration是針對特定的上層應(yīng)用程序(游戲本身),對kernel的元素進(jìn)行組織&配置。腳本系統(tǒng)無疑將是configuration的重要組成部分。

          游戲引擎需要為腳本系統(tǒng)提供的接口

          我們把游戲中的物體(實(shí)例)稱為object,把可以作用于object的函數(shù)叫action
          1、保存全局變量&局部變量
          2、得到object(s)的引用
          3、得到object(s)的屬性,并調(diào)用object的action
          4、提供timer進(jìn)行周期性觸發(fā)action 
          以上4點(diǎn)并不全面,但是卻是最最基本需要支持的部分。如果需要更深入,應(yīng)該還要提供對靜態(tài)場景的配置、設(shè)置場景結(jié)束條件以及完善的Debug機(jī)制等等。 

          游戲引擎不應(yīng)該為腳本系統(tǒng)提供的接口

          1、畫圖&播放聲音等算法
          2、內(nèi)存管理
          以上2點(diǎn)也并不全面,因?yàn)槟壳暗捻?xiàng)目沒有網(wǎng)絡(luò)方面的需求,所以沒有考慮安全等因素進(jìn)來。
          雜七雜八

          外設(shè)響應(yīng)

          我們把所有的gamer的輸入都?xì)w納為外設(shè)輸入。那么在游戲引擎里面,對外設(shè)的響應(yīng)應(yīng)該是游戲?qū)崟r反應(yīng)能力的直接體現(xiàn),在去年從事的游戲引擎項(xiàng)目中,采用了類似于windows消息隊(duì)列的方式,對某種特定外設(shè)輸入(比如:游戲手柄左鍵按下),掛上一個寫死的函數(shù)。在腳本系統(tǒng)引入以后,應(yīng)該不再掛上一個編譯式語言編寫的響應(yīng)函數(shù),而是調(diào)用腳本解釋器來運(yùn)行掛在這個外設(shè)上的腳本。所有外設(shè)都采用腳本來響應(yīng),這一思想是保證游戲可用戶自我配置的關(guān)鍵之一。

          冗余

          腳本的性能總是令人頭疼的。所以在引擎提供給腳本的接口當(dāng)中(全面所述4點(diǎn)當(dāng)然在內(nèi)),不要害怕冗余的情況出現(xiàn),而是要針對游戲開發(fā)者的需求,適當(dāng)?shù)脑黾右孑敵龅墓δ埽層螒蜷_發(fā)者在使用腳本的時候,能用將腳本寫得盡量的簡單。舉例來講:比如需要在某個時刻獲得離主角最近的怪獸,如果只使用前面所提的4種接口,需要在腳本里面枚舉出所有的怪獸,然后一一與主角的坐標(biāo)進(jìn)行距離計算,然后才能得到最近的一個怪獸。這是十分低效的。如果這一動作需要頻繁發(fā)生,那么勢必影響游戲的整體運(yùn)行效率。解決辦法就是在游戲引擎里面提供一個類似功能的API,由游戲引擎本身的開發(fā)語言(一般是編譯式語言)來完成這項(xiàng)功能,而游戲開發(fā)者只需要在腳本里面調(diào)用這個API即可完成這項(xiàng)運(yùn)算。如此做法在效率上應(yīng)該比前面的做法要高出許多。

          posted on 2007-05-30 22:07 tianlinux 閱讀(1060) 評論(1)  編輯  收藏 所屬分類: 腳本語言

          FeedBack:
          # re: 游戲引擎腳本系統(tǒng)
          2007-05-31 00:04 | 凌宇清輝♂毐
          對Game的編寫比較陌生,不過有興趣,希望能從你的文章中得到初步的認(rèn)知。  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 濮阳县| 梁河县| 汾西县| 房产| 南江县| 平潭县| 永川市| 霍邱县| 从化市| 乾安县| 罗甸县| 贵定县| 曲靖市| 屯昌县| 志丹县| 荔波县| 荔浦县| 镇平县| 延寿县| 长岛县| 河间市| 商洛市| 神农架林区| 千阳县| 会东县| 兖州市| 巴彦县| 林芝县| 日照市| 行唐县| 平度市| 阿合奇县| 开封市| 渝中区| 赞皇县| 象山县| 宝丰县| 绥宁县| 锦屏县| 石棉县| 三穗县|