posts - 4,comments - 15,trackbacks - 0

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

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

          游戲作為上層應(yīng)用程序,是在游戲引擎的基礎(chǔ)上運(yùn)行的,現(xiàn)在游戲的發(fā)展趨勢來看,游戲者(gamer)對(duì)游戲的可自我配置性有非常高的需求,特別是在游戲運(yùn)行時(shí)的自我配置,已經(jīng)不能通過簡單的傳參數(shù)來完成這種配置。所以,整個(gè)游戲的架構(gòu)有分成兩大塊的發(fā)展趨勢。一塊是kernel,另一塊是configuration。Kernel是游戲的基礎(chǔ)類&Object的集合,而configuration是針對(duì)特定的上層應(yīng)用程序(游戲本身),對(duì)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)該還要提供對(duì)靜態(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è)輸入。那么在游戲引擎里面,對(duì)外設(shè)的響應(yīng)應(yīng)該是游戲?qū)崟r(shí)反應(yīng)能力的直接體現(xiàn),在去年從事的游戲引擎項(xiàng)目中,采用了類似于windows消息隊(duì)列的方式,對(duì)某種特定外設(shè)輸入(比如:游戲手柄左鍵按下),掛上一個(gè)寫死的函數(shù)。在腳本系統(tǒng)引入以后,應(yīng)該不再掛上一個(gè)編譯式語言編寫的響應(yīng)函數(shù),而是調(diào)用腳本解釋器來運(yùn)行掛在這個(gè)外設(shè)上的腳本。所有外設(shè)都采用腳本來響應(yīng),這一思想是保證游戲可用戶自我配置的關(guān)鍵之一。

          冗余

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

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

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 彭州市| 壶关县| 原阳县| 和静县| 神木县| 巴彦县| 略阳县| 瑞昌市| 玉田县| 诸城市| 耒阳市| 阜康市| 抚顺市| 嘉荫县| 东乌珠穆沁旗| 德兴市| 安福县| 闽侯县| 方正县| 奎屯市| 炎陵县| 夏津县| 沙河市| 巩留县| 桂东县| 锡林浩特市| 崇文区| 资兴市| 弥渡县| 滁州市| 定结县| 永新县| 县级市| 伊春市| 合川市| 勐海县| 霍城县| 清徐县| 临汾市| 乌拉特后旗| 玉环县|