galaxy
語言
Gal徠axy 是一種腳本語言,又稱銀河。是一種類似C語言的程序語言。
星際爭霸2(StarCraftⅡ)腳本語言現已知Galaxy是一種類似C語言的程序語言。
Q:星際2的地圖編輯器還是使用魔獸爭霸3的JASS程式語言嗎,還是一種新版本的語言?
A:星際2的地圖編輯器使用一種全新的腳本語言,我們把它叫做Galaxy——銀河。這是一種很接近於C語言的語言,任何熟悉C語言的人對Galaxy都可以很快上手。
Q:它是事件驅動的還是面向對象的?
A:雖然多數本地函數是基於對遊戲對象操作的,但Galaxy語言本身不是面向對象的。
Q:對比魔獸爭霸3的地圖編輯器,星際2中是否允許自定義遊戲界面,如果允許的話可以做到什麼程度(在魔獸爭霸3中這項功能被嚴重限制了)?
A:遊戲中的用戶界面設定在大部分是放在數據文件中的,但是編輯器不支持修改這些文件。所以自定義用戶界面是可能的,只是不是那麼好操作。
Q:星際2地圖編輯器中有沒有值得我們注意的新功能,還是換湯不換藥?
A:魔獸爭霸3中地圖編輯器的功能,無論大小,在星際2中都或多或少的加以改進了。
Q:在新語言中,觸發器中的事件通訊能力——比如通過動作或者條件元素——有沒有什麼改進?
A:觸發編輯器一個顯著的更新就是支持自定函數了——包括動作和條件元素。這表示你可以基於其他動作元素上(或者自定義腳本)創建你自己的動作元素了,然後將他們應用於觸發器中,好了,現在你想幹啥就幹啥了。
Q:對於“英雄單位”的支持,與魔獸爭霸3有什麼不同么?還是幾乎一樣?
A:我們一直在努力創建一套比魔獸爭霸3更加靈活好用的英雄單位編輯系統。比如,地圖製作者可以修改任何自定義屬性的數值,這樣就可以編輯英雄單位了。
Q:這套編程語言會不會有公用的API函數?
A:在魔獸爭霸3中,有大量反映遊戲功能的的本地函數,可通過腳本進行二次開發。如果這是你所指的“公用API函數”,那麼星際2中也會有。
Q:星際爭霸2地圖編輯器所採用新語言中關於“垃圾處理機制”會有什麼改善嗎?比如在JASS中,所有的局部變數都需要在用完後置空,某些數據類型用完后還需要手動從遊戲中刪除(例如點對象)以防內存溢出。
A:銀河語言有著適用於所有本地類型的強大的垃圾回收系統,相比魔獸爭霸3有巨大的改進(JASS語言在技術上來講根本就沒有垃圾回收系統)。魔獸爭霸3中腳本的內存溢出的問題將成為歷史了。
目前已知的Galaxy和C的區別:(來源地精研究院)
1]Galaxy沒有float和double,只有一個fixed類型,代表定點小數。
2]Galaxy使用的是老式C語言的語法,因此變數必須聲明在頂部。
3]基於如上的原因,聲明數組時,數組尺寸必需寫在變數類型的後面而不是變數名的後面。
如
int abc; //正確
int abd; //錯誤
當然,多維數組是支持的。int abc; 合法。
4]不支持用括弧來進行的強制類型轉換,如(int)1.23。目前只能用原生函數來進行轉換。可能是基於同樣的理由,目前無法定義一個函數指針,因為函數指針也使用括弧。可能有其餘聲明方式,未知。
5]不支持++操作和--操作
6]基於以上原因,指針無法自增和自減。也無法使用p+1的方式來改變指針的值,因為1被識別為整數,不會自動轉換為指針類型。
7]不支持 格式的註釋塊。只支持單行註釋//
8]不支持預處理指令。
9]基於以上原因,Galaxy沒有#include。Galaxy使用的是
include "TriggerLibs/MeleeNotHardAI"
這樣的include方式,沒有#,文件名不用寫.galaxy的後綴。
10]不支持goto語句。
11]不支持new關鍵字,其實C本來就沒這個,這個是C++的
12]不支持動態內存分配,無法malloc().
13]不支持sizeof關鍵字。其實沒法malloc的話,sizeof確實也沒啥用。
14]沒有signed和unsigned關鍵字,所有Galaxy的數值類型都默認為有符號數。
15]不支持swith,只能用if.
16]不支持for循環,只能用while循環。
17]表達式(null==""),返回真,比較奇怪,但實際上他們確實是不同的兩個值。
18]所有if結構的選擇分支和所有while結構的循環體都必須寫在大括弧里,就算只有一行也不能省略大括弧。
if(1==1) UIDisplayMessage(PlayerGroupAll(), 4, StringToText("123"));
就無法通過。
徠必須寫:
if(1==1) {UIDisplayMessage(PlayerGroupAll(), 4, StringToText("123"));}