galaxy(語言)

本詞條是多義詞,共7個義項
更多義項 ▼ 收起列表 ▲

Galaxy 是一種腳本語言,又稱銀河。是一種類似C語言的程式語言。

基本介紹

  • 中文名:銀河語言
  • 外文名:The Galaxy rogramming Language
  • 類別:電腦程式設計語言
  • 作業系統:多平台
官方回答,和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中腳本的記憶體溢出的問題將成為歷史了。

和C區別

目前已知的Galaxy和C的區別:(來源地精研究院)
1]Galaxy沒有float和double,只有一個fixed類型,代表定點小數。
2]Galaxy使用的是老式C語言的語法,因此變數必須聲明在頂部。
3]基於如上的原因,聲明數組時,數組尺寸必需寫在變數類型的後面而不是變數名的後面。
int[3] abc; //正確
int abd[3]; //錯誤
當然,多維數組是支持的。int[3][4] 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"));
}

相關詞條

熱門詞條

聯絡我們