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

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

Nebula3腳本系統(tǒng)

Posted on 2008-12-14 21:55 Condor 閱讀(668) 評(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)槟_本語言一般缺少?gòu)?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国产一区| 久久综合色影院| 亚洲欧美资源在线| 亚洲香蕉在线观看| 亚洲图片欧美日产| 亚洲综合国产| 久久成人18免费观看| 久久不射电影网| 欧美成人精品不卡视频在线观看| 亚洲欧美日韩视频一区| 亚洲欧美一区二区原创| 亚洲综合国产精品| 午夜精品久久久久久久久| 性欧美暴力猛交69hd| 久久精品日韩| 欧美三区美女| 激情久久婷婷| 在线中文字幕日韩| 亚洲国产精品女人久久久| 国产日韩欧美综合一区| 国产一区二区在线免费观看| 国产午夜久久久久| 艳妇臀荡乳欲伦亚洲一区| 久久久久久久一区二区三区| 亚洲高清成人| 欧美一区二区免费| 欧美日韩免费视频| 国产乱码精品一区二区三| 亚洲人午夜精品| 欧美国产另类| 性欧美8khd高清极品| 欧美三区美女| 亚洲理论在线观看| 91久久久久久| 欧美77777| 亚洲伦理中文字幕| 亚洲高清视频一区| 欧美日韩中文字幕综合视频| 亚洲日本激情| 亚洲网站在线播放| 国产麻豆精品视频| 免费影视亚洲| 欧美激情va永久在线播放| 欧美成人激情视频| 亚洲香蕉网站| 亚洲黄色一区二区三区| 久久综合999| 亚洲一区二区三区四区五区黄 | 欧美成人有码| 亚洲精品一级| 韩日精品视频| 国产欧美日韩综合一区在线播放| 中文日韩电影网站| 久久精品五月| 亚洲激情偷拍| 亚洲一区二区三区777| 国内精品美女在线观看| 亚洲激情视频在线观看| 欧美人与禽猛交乱配| 亚洲综合日本| 久久精品2019中文字幕| 亚洲精品中文字幕女同| 欧美国产日本| 欧美一区二视频在线免费观看| 国产手机视频一区二区| 91久久国产综合久久| 国内精品视频一区| 亚洲天堂免费观看| 亚洲毛片一区| 欧美成人免费小视频| 麻豆精品视频| 在线观看亚洲专区| 久久国产精品久久久久久| 亚洲欧美国产一区二区三区| 欧美成人午夜剧场免费观看| 久久一综合视频| 在线观看亚洲| 噜噜噜噜噜久久久久久91| 欧美成人免费va影院高清| 伊人天天综合| 欧美精品偷拍| 亚洲精品视频一区二区三区| 亚洲美女视频在线观看| 欧美精品1区2区| 亚洲综合色噜噜狠狠| 久久久久国色av免费看影院 | 国产精品一区二区在线观看| 夜夜嗨av色综合久久久综合网 | 欧美三级黄美女| 日韩小视频在线观看| 亚洲永久在线| 韩国欧美一区| 欧美日本一区二区高清播放视频| 亚洲精品一区在线观看| 久久精品夜色噜噜亚洲aⅴ| 亚洲缚视频在线观看| 欧美日韩网址| 免费短视频成人日韩| 亚洲男人的天堂在线aⅴ视频| 每日更新成人在线视频| 亚洲一区黄色| 99精品视频免费观看| 在线观看视频一区二区欧美日韩| 国产精品成人一区二区艾草| 噜噜噜久久亚洲精品国产品小说| 中文国产一区| 亚洲视频 欧洲视频| 亚洲福利一区| 亚洲国产日韩一区| 美女脱光内衣内裤视频久久网站| 欧美一区二区高清| 久久精品国产v日韩v亚洲| 亚洲欧美中文在线视频| 亚洲自拍高清| 欧美一区二区三区免费在线看 | 国产视频一区在线观看| 欧美性开放视频| 欧美视频一区二区三区在线观看| 欧美精品一区二区高清在线观看| 麻豆国产va免费精品高清在线| 欧美一区二区三区四区在线观看| 欧美a级一区二区| 久久天天躁夜夜躁狠狠躁2022 | 日韩一二在线观看| 亚洲男人的天堂在线| 亚洲综合丁香| 久久久综合精品| 亚洲精品午夜精品| 午夜激情综合网| 欧美精品xxxxbbbb| 国产精品五区| 亚洲精品乱码久久久久久黑人| a91a精品视频在线观看| 欧美亚洲综合久久| 亚洲国产精品999| 亚洲在线一区| 欧美日韩国产大片| 在线播放不卡| 久久久久久网址| 日韩视频中文| 欧美本精品男人aⅴ天堂| 国产精品入口麻豆原神| 99国产欧美久久久精品| 久久综合伊人77777蜜臀| 一区二区三区 在线观看视频| 久久综合色天天久久综合图片| 国产精品观看| 午夜精品一区二区三区在线播放| 欧美国产日韩精品免费观看| 亚欧成人在线| 国产亚洲欧美激情| 久久久精品性| 久久久综合视频| 在线成人av| 欧美福利专区| 欧美激情第一页xxx| 99国内精品久久| 亚洲精品资源美女情侣酒店| 欧美黄色一区二区| 亚洲视频在线一区观看| 一本久道久久综合狠狠爱| 欧美日韩国产在线看| 日韩一级大片在线| 亚洲精品一区二区三| 欧美日韩精品综合在线| 亚洲欧美日韩成人高清在线一区| 亚洲小说欧美另类婷婷| 国产在线观看91精品一区| 欧美成人激情视频| 欧美午夜影院| 蘑菇福利视频一区播放| 欧美日韩精选| 美日韩免费视频| 欧美日韩国产经典色站一区二区三区| 亚洲午夜国产一区99re久久 | 亚洲激情视频| 国产精品久久久久999| 欧美电影在线| 国产欧美日韩在线| 9l国产精品久久久久麻豆| 国内精品久久久久久影视8| 99国产精品国产精品毛片| 精品91在线| 久久精品欧美| 久久久国产午夜精品| 国产欧美精品日韩| 一区二区三区黄色| 99国产精品久久久| 欧美激情综合五月色丁香小说| 久久精品亚洲精品国产欧美kt∨| 国产精品成人一区| 亚洲无线观看| 久久精品女人的天堂av| 国产日韩精品在线播放| 午夜欧美视频| 欧美成人精品在线观看| 亚洲精品国偷自产在线99热| 欧美精品一区三区| 亚洲视频一区二区免费在线观看|