GML[一種解釋性程式設計語言]

GML[一種解釋性程式設計語言]
更多義項 ▼ 收起列表 ▲

GML(Game Maker Language)是一種解釋性程式設計語言。 它被設計成用於一個稱為“GameMaker”的遊戲引擎的腳本語言,它最初由Mark Overmars創建,用於補充Game Maker中使用的按鈕拖放作業系統。 但是,在最新版本中,所有的按鈕拖放都轉換為GML,而不是與其分離。 GML與Game Maker環境高度集成。 通常,像精靈圖像和聲音等元素都是在Game Maker 的IDE中組織的(雖然它們也可以從外部檔案載入)。 Game Maker的架構旨在處理諸如事件檢測,級別設計和對象配置之類的事情時無需手動編寫代碼,通過直觀的界面功能最大程度地減少代碼冗長的問題。

庫(lib)相關

在Game Maker中,一組拖放操作稱為“lib”。 在GM界面中,這些lib顯示為包含稱為操作的圖示的選項卡。 每個操作都是一個GML腳本或函式,用戶可以在遊戲製作中使用。 Game Maker提供了一組默認的lib,其中包含大多數遊戲使用的常用操作; 開發者也可以使用與Game maker分開提供的lib構建器來創建lib。

GML的語法和語義

GML在使用代碼塊,函式調用,變數賦值,操作符語法等方面在結構上類似於基於C語言的其他程式語言。

GML在語句和表達式之間有區別。 例如g <1; 不是有效的語句,GM將返回錯誤。 另外,變數賦值總是GM中的語句,不能在表達式中使用。

GML還允許遞增/遞減運算符。 例如,代碼g + = 1;與g = g + 1相同;同樣的函式適用於運算符 - =,* =和/ =。

在Game maker:studio中,GML還允許使用類似C++的“++” ( 自增)、 “--” ( 自減)運算符。

Game Maker不允許“?:”語法。 GML語句可以用分號分隔,但是Game Maker不強制這樣做。

函式

Game Maker內置有一個強大的函式館可用於基本功能。 程式設計師還可以創建以相同方式調用函式的腳本。 GML中的繪圖函式使用Direct3D API。

GM還具有用於調用外部DLL的內置函式。 任何未通過Game Maker本體提供的功能都可以使用DLL添加。

變數

通常,GML不要求使用大部分其他程式語言的方式來聲明變數。每當程式設計師第一次為某個變數賦值,就創建了一個變數,如foo =“bar”;.

GM有許多內置的變數和常量。遊戲中的每個實例都有一組內置的局部變數,如“x”和“y”。還有一些內置的全局變數,如“score”,它們獨立於各個實例存在。與由程式設計師定義的全局變數不同,這些內置全局變數不包含“global."字首。

數組也可以在GML中聲明,並且可以是1或2維。數組可能包含字元串和實值的混合,但不能包含數組本身。數組不能傳遞給函式,也不能從GML中的函式返回。並且數組的規模有限制,索引不能大於32,000,任何單個數組可能不包含總計1,000,000個值。GML還具有用於創建和編輯六個簡單數據結構的函式。這些功能僅適用於擁有專業版Game Maker(或GMS)的用戶。可用的數據結構包括堆疊,佇列,列表,映射,優先權佇列和格線

變數類型

為了簡單起見,GML只有兩個變數類型。 每個變數可以保存每種類型的數據,而沒有任何類型聲明。

*字元串 是可以是任何長度的ASCII字元集。 只有記憶體限制字元串的大小。

*實數值 是帶符號的浮點數。 從版本6.1開始,GM還允許在代碼中以十六進制表示實際值(前面加“$”)。 在版本6中,實際值處理有一個錯誤,其實際值精度被限制為小於預期(當使用大的實數值計算時導致不準確的結果)。 這個問題仍然存在於GM7中,但它已經被更大的精度減輕了。

因為GML沒有布爾值,所以需要布爾值的語句(如“if”)會將大於0.5的任何值計算為true,將0.5或任何較小的值計算為false。 常量“true”和“false”可以用於代替GML中的1和0。

局部性

在GML中,有兩種類型的可變局部性:對“實例”的局部性,對“腳本”(或具有其自己的容器的任何其他代碼塊)的局部性。若一個變數作為實例而言是“本地的”,意味著該變數綁定到該特定實例,並且可以僅使用標識該實例的前綴來調用(比如:player.hp);若該變數對於腳本而言是“本地的”,則意味著變數只能在該腳本內引用(並且當腳本完成處理時被清除),因為腳本沒有用戶可訪問的標識符。當使用術語“local”而沒有進一步說明時,通常指實例局部性。

默認情況下,變數對實例是本地的,但不是使用它的腳本的本地變數。要使變數對所有實例可訪問,可以通過加上“global.”讓它變成全局變數(如global.foo = bar;)或以 globalvar foo,bar; 形式明確聲明。若使用前一方式,變數必須始終global.字首; globalvar聲明允許在沒有前綴的情況下訪問全局變數。要使變數在僅使用它的腳本的本地生效,使用關鍵字var,如在var foo,bar;。

實例本地的變數可以在實例操作之外訪問,方法是在變數名前加上實例標識符(比如:player.hp-=50)。如果多個腳本同時在處理堆疊上,則無法從另一個腳本訪問一個腳本中的腳本局部變數,除非變數作為參數傳遞到另一個腳本。

可以使用“with”結構更改當前實例的命名空間。例如,放置在碰撞事件中的以下代碼片段可以用於銷毀涉及的其他實例。在生成碰撞事件時,Game Maker自動創建變數“other”作為對其他對象的引用。

比如:with(other) {instance_destroy(); }

相關搜尋

熱門詞條

聯絡我們