庫(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(); }