青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 94, comments - 250, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

Nebula3腳本系統(tǒng)

Posted on 2008-12-14 21:55 Condor 閱讀(686) 評(píng)論(0)  編輯 收藏 引用

Nebula2的腳本系統(tǒng)實(shí)現(xiàn)了一個(gè)面向C++的腳本接口, 它把腳本命令直接映射到了C++方法. 從技術(shù)角度來說, 這是一個(gè)簡(jiǎn)捷的思路, 但是對(duì)于需要把游戲邏輯和行為腳本化的關(guān)卡設(shè)計(jì)師來說, Nebula2的腳本系統(tǒng)太底層和透明了.

關(guān)卡邏輯腳本一般來說構(gòu)架于比C++接口更高級(jí)的層次上, 直接把腳本命令映射到C++方法會(huì)把腳本層次弄得錯(cuò)綜復(fù)雜. Bug甚至?xí)韧瑯拥腃++代碼更多, 因?yàn)槟_本語言一般缺少強(qiáng)類型檢查和”編譯時(shí)”的錯(cuò)誤檢測(cè), 所以在本應(yīng)在C++編譯時(shí)發(fā)現(xiàn)的Bug會(huì)在腳本運(yùn)行時(shí)才發(fā)現(xiàn)(這對(duì)于不同的腳本語言有所不同). 這是我們從Project Nomads中得出的經(jīng)驗(yàn), 它就是用Nebula2的腳本系統(tǒng)驅(qū)動(dòng)的.

所以教訓(xùn)就是: 把你的腳本架構(gòu)在一個(gè)正確的抽象層上, 并且: 把你的C++接口映射到一種腳本語言是沒有意義的, 因?yàn)槟菢幽悴蝗鐝囊婚_始直接用C++來做這些東西.

相應(yīng)的, 新的Nebula3腳本哲學(xué)為關(guān)卡設(shè)計(jì)師提供一些在”正確的抽象層”的(大多是限于特定應(yīng)用)積木. 當(dāng)然, “正解的抽象層” 很難來定義, 因?yàn)檫@要在靈活性跟易用性之間找到一個(gè)平衡( 例如, 一個(gè)”Pickup” 命令是不是應(yīng)該把角色移動(dòng)到拾取范圍內(nèi)呢? )

除了太底層以外, Nebula2的腳本系統(tǒng)也有一些其它的缺點(diǎn):

  • C++方法必須遵循可以轉(zhuǎn)化為腳本的原則( 只有簡(jiǎn)單數(shù)據(jù)類型才可以做為參數(shù) )
  • 給程序員帶來麻煩. 每個(gè)C++方法都需要額外的腳本接口代碼( 每個(gè)方法幾行 )
  • 只有派生自nRoot的類可以腳本化
  • 對(duì)象關(guān)聯(lián)到腳本系統(tǒng)( 思路簡(jiǎn)單, 但是增加的依賴性會(huì)使重構(gòu)非常困難 )

下面是Nebual3的底層腳本的大概:

  • 腳本系統(tǒng)的基礎(chǔ)是Script::Command類
  • Script::Command是一個(gè)完全腳本語言無關(guān)的, 它包含了一個(gè)命令名稱, 一些輸入?yún)?shù)的集合還有一些輸出參數(shù)的集合.
  • 一個(gè)新的腳本命令通過派生Script::Comand類來創(chuàng)建, 腳本的C++功能代碼可以寫入子類的OnExecute()方法
  • ScriptServer類是腳本系統(tǒng)中僅有一個(gè)腳本語言相關(guān)的類, 它會(huì)把Command對(duì)象注冊(cè)成新的腳本命令, 并且把命令參數(shù)在腳本語言和C-API之間做翻譯.

這個(gè)觀念比Nebula2更為簡(jiǎn)單, 最重要的是, 它不會(huì)跟Nebula3的其它部分交織在一起. 甚至可以通過改變一個(gè)#define來編譯一個(gè)沒有腳本支持的Nebula3.

當(dāng)然, 書寫腳本命令的C++代碼跟Nebula2一樣煩人, 這是NIDL的由來. NIDL的是全稱是”Nebula Interface Definition Language”. 基本思想是通過為腳本命令定義一個(gè)簡(jiǎn)單的XML schema并把XML描述編譯成派生了Script::Command的C++代碼, 來盡量減少書寫腳本命令的重復(fù)性工作.

對(duì)于一個(gè)腳本命令必不可少的信息有:

  • 命令的名稱
  • 輸入?yún)?shù)的類型和名稱
  • 輸出參數(shù)的類型和名稱
  • 對(duì)應(yīng)的C++代碼( 通常只有一行 )

還有一些非必須, 但是可以帶來便利性的信息:

  • 關(guān)于命令的作用和每個(gè)參數(shù)的意義的描述, 這可以作為運(yùn)行時(shí)的幫助系統(tǒng)
  • 一個(gè)唯一的FourCC(四字符碼), 可以更快的通過二進(jìn)制通道傳輸

大部分的腳本命令翻譯成了大約7行的XML-NIDL代碼. 這些XML文件再用”nidlc”NIDL編譯器工具編譯為C++代碼. 這個(gè)預(yù)處理是VisualStudio完全集成的, 所以使用NIDL文件不會(huì)為程序員代來任何困難.

為了減少亂七八糟的文件(編譯生成的), 相關(guān)的腳本命令被組織到一個(gè)叫作庫的集合中. 一個(gè)庫由一個(gè)單獨(dú)的NIDL-XML文件表示, 并且它只會(huì)被翻譯一個(gè)C++頭文件和一個(gè)C++源代碼文件. 腳本庫可以在程序啟動(dòng)時(shí)注冊(cè)到ScriptServer, 所以如果你的應(yīng)用程序不需要腳本訪問文件的話, 僅僅不注冊(cè)IO腳本庫就可以了. 這會(huì)減小可執(zhí)行文件的體積, 因?yàn)檫B接器會(huì)把沒有用到的腳本庫丟棄掉.

最后, Nebula3放棄了TCL作為標(biāo)準(zhǔn)的腳本語言, 而采用了運(yùn)行時(shí)代碼更加小巧的LUA. LUA已經(jīng)成為游戲腳本的準(zhǔn)規(guī)范, 這也使得尋找熟練的LUA關(guān)卡設(shè)計(jì)師更加容易.


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国精产品99永久一区一区| 亚洲午夜久久久| 亚洲欧美一区二区三区极速播放 | 欧美一区二区观看视频| 一区二区三区欧美| 亚洲视频在线观看免费| 亚洲欧美在线免费观看| 久久精品国产免费观看| 蜜臀久久久99精品久久久久久| 久久午夜电影网| 亚洲第一在线综合网站| 美日韩精品视频免费看| 亚洲国产精品成人一区二区| 亚洲日本va在线观看| 在线综合亚洲| 久久久亚洲综合| 欧美精品久久99| 国产情人综合久久777777| 狠狠色丁香婷婷综合影院| 卡一卡二国产精品| 亚洲一区三区电影在线观看| 欧美麻豆久久久久久中文| 日韩一区二区精品在线观看| 一区二区激情| 久久综合狠狠| 国产精品久久久久久久久久久久久 | 精品粉嫩aⅴ一区二区三区四区| 在线观看av一区| 亚洲永久免费观看| 欧美成年人网| 亚洲免费在线播放| 欧美精品一区视频| 1000部国产精品成人观看| 亚洲欧美日韩网| 亚洲黄色成人| 久久久中精品2020中文| 欧美视频免费在线观看| 亚洲国产另类久久精品| 欧美在线黄色| 一区二区三区高清不卡| 免费观看欧美在线视频的网站| 国产精品毛片va一区二区三区| 亚洲精品国产精品国自产观看 | 欧美在线日韩在线| 99精品视频一区| 欧美精品123区| 激情成人在线视频| 欧美在线视频二区| 亚洲欧美日韩国产综合| 欧美香蕉大胸在线视频观看| 91久久亚洲| 蘑菇福利视频一区播放| 久久成人免费电影| 国产午夜精品视频免费不卡69堂| 亚洲一区在线看| 一区二区三区鲁丝不卡| 欧美视频亚洲视频| 亚洲专区一区二区三区| 亚洲免费不卡| 欧美日韩国产在线看| 9l国产精品久久久久麻豆| 亚洲国产精品热久久| 欧美精品久久99| 夜夜嗨av一区二区三区四季av| 亚洲高清视频一区| 欧美精品情趣视频| 夜夜嗨一区二区| 在线一区观看| 国产日韩av高清| 久久久一二三| 久久久不卡网国产精品一区| 午夜日韩视频| 在线成人www免费观看视频| 欧美a级一区| 欧美肥婆在线| 亚洲男人第一网站| 欧美一区二区日韩一区二区| 狠狠操狠狠色综合网| 欧美国产先锋| 国产精品www色诱视频| 欧美在线观看你懂的| 久久男人av资源网站| 日韩午夜视频在线观看| 在线亚洲成人| 在线不卡中文字幕播放| 亚洲国产综合在线| 国产精品视频你懂的| 蜜桃av综合| 欧美日韩国产综合网| 欧美一区二区三区免费在线看| 久久精品国产综合| 一区二区三区黄色| 欧美一区二区三区视频在线 | 亚洲欧美日韩天堂| 亚洲成人中文| 亚洲视频在线观看免费| 激情成人中文字幕| 亚洲婷婷综合久久一本伊一区| 韩国精品一区二区三区| 亚洲精品中文字幕女同| 国自产拍偷拍福利精品免费一| 亚洲国产1区| 国产亚洲欧美激情| 日韩系列在线| 亚洲第一天堂av| 亚洲一区二区三区在线看| 亚洲国产成人久久综合一区| 国产精品99久久久久久有的能看| 精品不卡一区| 午夜亚洲福利| 亚洲女同性videos| 欧美激情 亚洲a∨综合| 久久久水蜜桃av免费网站| 欧美日在线观看| 亚洲韩国精品一区| 亚洲福利视频网| 欧美一区二区视频在线观看| 亚洲香蕉在线观看| 欧美精品麻豆| 亚洲欧洲视频| 亚洲国产精品成人一区二区| 亚洲欧美日韩国产成人精品影院| 亚洲美女av在线播放| 久久久www| 久久夜色精品国产噜噜av| 国产欧美日韩另类一区 | 一区二区成人精品| 日韩午夜电影| 欧美韩日一区二区三区| 免费成人美女女| 狠狠色丁香久久婷婷综合_中| 欧美在线视频网站| 国产精品丝袜xxxxxxx| 99精品视频免费| 亚洲欧美国产精品va在线观看| 欧美另类极品videosbest最新版本| 免费观看在线综合| 在线日韩av片| 欧美电影免费网站| 91久久国产综合久久91精品网站| 亚洲国产欧美一区二区三区同亚洲| 欧美专区18| 免费成人高清在线视频| 亚洲韩国精品一区| 欧美激情在线有限公司| 亚洲精品欧洲| 亚洲免费视频网站| 国产日韩视频| 久久午夜羞羞影院免费观看| 男女av一区三区二区色多| 亚洲精品国产精品国产自| 欧美日韩国产欧美日美国产精品| 亚洲精品小视频在线观看| 亚洲欧美日韩一区二区三区在线| 国产精品一区二区久久久| 午夜综合激情| 美女黄色成人网| 日韩一级精品视频在线观看| 欧美日韩美女在线观看| 亚洲欧美日本另类| 美女黄网久久| 亚洲综合色丁香婷婷六月图片| 国产一区二区成人| 免费观看成人| 亚洲欧美在线一区二区| 欧美刺激性大交免费视频| 一区二区三区高清| 精久久久久久| 国产精品家庭影院| 久久精品中文字幕一区| 亚洲欧洲精品一区二区三区波多野1战4| 99国产一区| 国产亚洲毛片在线| 欧美日韩123| 久久久免费观看视频| 日韩视频免费大全中文字幕| 久久国内精品视频| 夜夜嗨av一区二区三区中文字幕| 国产无遮挡一区二区三区毛片日本| 久久久久一区二区| 亚洲一区二区三区免费观看 | 午夜精品亚洲| 亚洲精品永久免费| 毛片精品免费在线观看| 亚洲欧美国产va在线影院| 亚洲国产精品成人综合| 国产婷婷一区二区| 国产精品va在线播放我和闺蜜| 久久久精品免费视频| 亚洲社区在线观看| 亚洲国产一区二区三区青草影视| 性欧美暴力猛交69hd| 日韩网站在线看片你懂的| 激情偷拍久久| 国产欧美 在线欧美| 欧美特黄一级| 欧美另类一区二区三区| 老色鬼久久亚洲一区二区| 欧美亚洲三区| 亚洲欧美成人精品|