AngelScript基本用法

AngelScript腳本語言
用了一下午的時間去看這一個讓我一開始懵的語言“AngelScript”,但是慢慢查詢網上資料,也開始變得慢慢清晰起來:AngleScript是一個專門爲擴展應用程序功能而開發的跨平臺的腳本庫。其實它的底層就是C++,與Lua(底層是C)正好算的上是難兄難弟,像Lua之面向C,用原始API,註冊一個複雜點的函數到C中,得寫得手抽筋,所以就有各種各樣的Lua綁定庫。而AngelScript的官方API只需要一行。可以看出作者是很用心在爲C++服務。它甚至還能註冊C++模板。
支持接口,繼承,多態,操作符重載,多線程,垃圾回收,枚舉,typedef,函數指針,模塊插件,單步執行調試,動態編譯加載……簡直就像是C++的翻版。性能支持二進制編譯。
如果你的遊戲本體是C++的話,用AngelScript,意味着腳本只是你本體的一個延伸,其基本的架構和思路是一以貫之的。而用C++和Lua的話,你得在強類型面向對象和弱類型Table的靈活中不停的轉換腦袋。
有利也有弊,AngelScript貼合C++的代價是,它不能很好的移植到其他的語言平臺上去,比如和C#,java綁定,應用面就會受限,雖然想做的話也可以通過一個小的C層也可以簡單的實現,但畢竟從腳本風格上來說不如Lua那樣自身畢竟純粹,AngelScript太有C++味道了。而Lua因爲小而美,學的人用的人,掌握的概念不多,不折騰,就更容易傳播。
用雙重標準來說,跟mono C#比,AngelScript顯然功能要弱得多,但是要小得多,源碼只有幾十個文件。跟Lua比,AngelScript功能要強大的多,體積性能上大家差不多。AngelScript是中間的選擇,所以有時候也很尷尬。
雖然很遺憾它沒有流行開來,但客觀來說絕對是一個優秀的腳本語言。作者維護的頻率也很快,而且C++源碼風格少有的清晰,提供的接口異常的友好,想想看你用一個腳本語言卻不需要在官方API上再封裝一層是什麼體驗。想學習腳本開發的話,是非常不錯的資料。

2、  將SDK壓縮包解壓

3、  在visual studio 2010 上新建一個 AngelScriptTest1 的工程

4、  將解壓後的SDK下 \AngelScript\sdk\samples\tutorial\source中的main.cpp 拷貝到AngelScriptTest1 的源文件下

5、  將\AngelScript\sdk\angelscript\include下的頭文件拷貝到AngelScriptTest1 的頭文件目錄下,編譯後:

        fatal error C1083: 無法打開包括文件:“angelscript.h”: No such file or directory

        將該頭文件拷貝到工程目錄下:D:\My_VS2010\AngelScriptTest1

        並配置工程屬性:參見http://www.cnblogs.com/txg-blog/archive/2011/03/07/1974857.html

6、  將D:\My_VS2010\AngelScript\sdk\add_on\scriptstdstring目錄下的文件:

scriptstdstring.h  和 scriptstdstring.cpp 拷貝到工程目錄

D:\My_VS2010\AngelScriptTest1中,並分別添加到項目的頭文件和源文件中。


7、  再次編譯:

fatal errorLNK1104: 無法打開文件“angelscriptd.lib”

點擊項目屬性à配置屬性à鏈接器à輸入à附加依賴項,輸入

    "D:\My_VS2010\AngelScript\sdk\angelscript\lib\angelscriptd.lib",要有雙引號。

8、  再編譯:

   error LNK2019: 無法解析的外部符號 __imp__timeGetTime@0,該符號在函數 "int __cdeclRunApplication(void)" (?RunApplication@@YAHXZ) 中被引用

說明還有一個用到的庫沒有加載進來。在main.cpp文件中添加該庫,如下:

#pragmacomment(lib,"winmm.lib")


9、  再次編譯,成功。運行程序:


已經成功運行起來了,但代碼中script.as 文件沒有打開,應該是程序沒有找到該文件,於是我們找到輸出該語句的地方:

FILE *f =fopen("script.as", "rb");

       if( f == 0 )

       {

              cout << "Failed to openthe script file 'script.as'." << endl;

              return -1;

       }

它是在當前項目中打開文件,查看項目,沒有該文件,於是我們從:

D:\My_VS2010\AngelScript\sdk\samples\tutorial\bin

拷貝一個script.as 文件到 我們創建的工程目錄 D:\My_VS2010\AngelScriptTest1下

10、  再運行,成功輸出:


額外說明:

這裏配置項我們使用的是絕對路徑,在這種情況下,移動文件夾,就有可能導致項目運行不起來,如果使用相對路徑就可以避免這種情況:

如第5步:對頭文件目錄的配置

D:\My_VS2010\AngelScriptTest1

可以改爲:

$(ProjectDir), 表示工程的根目錄。

 

第7步對庫的依賴配置

"D:\My_VS2010\AngelScript\sdk\angelscript\lib\angelscriptd.lib",

可以改爲:

"$(ProjectDir)..\AngelScript\sdk\angelscript\lib\angelscriptd.lib"


發佈了50 篇原創文章 · 獲贊 39 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章