## 源代碼管理
**源代碼管理(SCM)**是通過存儲庫和本地源代碼在*子版本*工作或備份項目的方法的名稱。基本上,SCM 解決方案是一個獨立的軟件包,它在你處理項目時控制項目維護、更改和比較的所有方面。這對那些在團隊中工作并且需要能夠控制誰做什么而不用擔心丟失數據或可能需要在以后進行撤消更改的人尤其有用,但是個人也可以從系統這種強大而靈活的方面受益。
你可以使用各種 SCM 工具,*GameMaker Studio 2*附帶一個 Git 插件,可以立即使用,而且你無需安裝任何額外的軟件包,因為它與插件本身捆綁在一起。下面我們提供一個關于如何設置此插件的小教程,并將 SCM 工具與項目一起使用。在頁面底部,我們還概述了 SCM 上下文菜單,這也在教程部分中引用。
**重要!**試用許可**不能**使用源代碼管理。
**重要!**我們建議你在嘗試在*GameMaker Studio 2*中使用源控件之前,先了解源代碼管理的工作原理。
### 設置源代碼管理 Git 插件
First of all, we need to setup an identity for Git to commit as, which means we need to go to the[Plugins - Source Control (Git)](https://gamemakerchina.github.io/GMS2_manual_en2ch/source/_build/1_overview/1_getting_started/preferences/prefs_plugins.html)section of the Preferences and add your authentication details.
:-: 
此身份驗證標識將用于所有未來的項目,*GameMaker Studio 2*為你提供了兩種不同的設置方式:
* **用戶名和密碼**:單擊 “添加用戶 / 密碼身份驗證” 按鈕將顯示以下窗口,你可以在其中輸入**存儲庫 URL**、**用戶名**和**密碼**:
:-: 
如果你希望這僅影響*特定*存儲庫,則將存儲庫的 URL 放在頂部字段中。 但是,如果它是你想要的域范圍身份驗證(即:“bitbucket.org” 或 “github.com”),那么只需放置域名而不是其他內容。當某些東西需要檢查身份驗證時,它將首先查找特定的存儲庫匹配,*然后*查找域匹配。 這將允許你對域進行默認身份驗證,并在以后覆蓋某些存儲庫的特定詳細信息。
> **注意** : 如果你使用的是外部存儲庫,那么你應該使用與為該存儲庫設置的帳戶關聯的用戶名和密碼,但如果你想使用本地存儲庫,則可以使用任何用戶名和密碼。
* **SSH 密鑰對**:單擊 “添加 SSH 密鑰對身份驗證” 將顯示以下窗口,你可以在其中輸入**存儲庫 URL**和**密碼**,然后提供所需的**公鑰**和**私鑰**文件的路徑:
:-: 
與用戶名 / 密碼身份驗證一樣,你可以在使用 SSH 密鑰對時進行域和存儲庫特定的身份驗證。 如果你已經生成了 SSH 密鑰對,則可以在此處設置路徑,以及訪問它們所需的密碼。 請注意,如果你需要快速訪問公鑰,復制按鈕將自動將內容復制到剪貼板。如果你還沒有 SSH 密鑰對,單擊**創建秘鑰對**按鈕將彈出一個文件對話框,顯示私鑰的放置位置,并在其旁邊創建公鑰 - 這將自動為你填寫公鑰和私鑰的路徑。
在處理克隆、推送和拉取請求時,這些設置現在將用于與存儲庫(例如:Git Hub、Bit Bucket 等)進行通信。但是,你仍然需要設置每個項目選項,可以通過打開[主要選項](https://gamemakerchina.github.io/GMS2_manual_en2ch/source/_build/2_interface/3_settings/game_options/index.html)并單擊*啟用源代碼管理*選項來完成。 這將激活當前項目的 SCM。
:-: 
一旦啟用了源代碼管理(并應用它或關閉了游戲選項),IDE 的頂部將出現一個新的上下文菜單,其中包含以下選項(我們將在本頁的其余部分中介紹):
:-: 
> **注意**:如果你需要再次編輯身份驗證詳細信息,只需雙擊該條目,將打開詳細信息窗口供你編輯,但你將**無法**重命名該 URL。 如果你需要更改 URL,則需要刪除身份驗證詳細信息并重新添加。 要刪除身份驗證詳細信息,請單擊 “偏好設置” 主窗口中該行左側的關閉按鈕。
:-: 
### 存儲庫選項
你現在需要將*GameMaker Studio 2*IDE 鏈接到存儲庫:
* 創建項目存儲庫
* 將當前項目推送到外部存儲庫
* 克隆現有存儲庫
在第一種情況下,創建項目存儲庫,這將直接在項目所在的位置創建一個 Git 存儲庫。 在 Git 的說法中,這是一個 “非裸存儲庫”,因此在這種情況下 推送 / 拉取 沒有任何意義,但你仍然可以提交并跟蹤項目更改,并在需要時還原更改和修正。要進行此設置,只需在主菜單上單擊*源代碼管理*\>*創建項目庫*即可。
:-: 
但是,你可能已經有一個現有項目,并希望將其放入*外部*存儲庫,以便在你的團隊中進行跟蹤和共享。這需要已設置外部存儲庫,以及在身份首選項中設置的正確用戶名和密碼才能訪問它。 如果準備好了,請單擊*源代碼管理*\>*將項目導入庫中*,然后填寫 URL。
:-: 
最后,作為便捷功能,你可以通過 IDE*克隆*外部存儲庫。 同樣,你需要輸入要在身份首選項中設置的存儲庫的用戶名和密碼,然后只需單擊*源代碼管理*\>*克隆存儲庫*即可。 填寫 URL(使用 HTTPS 變體而不是 SSH)并說出你想要的位置。
:-: 
克隆完成后,它將自動打開文件瀏覽器,以便你根據需要打開項目。
### 標準工作流程
當你處理項目時,你將自然地創建精靈、編輯腳本、刪除時間軸,以及隨著項目的不斷發展所需的其他內容。 這些都是你可能想要跟蹤的行為,如果出現問題則可以返回。這是使用源代碼管理的主要原因 - 以便可以恢復任何事故 - 我們將從一開始就快速引導你完成基本工作流程,以便你了解其工作原理。
從頭開始,創建一個新的 GML 項目,然后通過主要選項激活源代碼管理。這使我們可以訪問頂部的源代碼管理菜單,因此我們將立即啟動*創建項目庫*。如果你查看房間資源,你可以看到默認房間已經擁有紅色感嘆號,這意味著它已經從它的最后狀態進行了修改。 如果我們在項目中有其他資源,你會看到它們都具有相同的圖標,如下圖所示:
:-: 
我們現在可以選擇提交空白項目,也可以將其設置為基本狀態。現在,我們將進行第一次提交,然后單擊*源代碼管理*\>*提交更改*。我們將獲得一個被分為三個區域的窗口:
:-: 
* 提交更改 - 這表示將提交給源的更改。這可能是空白的,但它可能會顯示主選項更改,這很好。
* 不提交更改 - 顯示已更改的文件,但我們沒有告訴 Git 我們要提交它們 - 它們是 “待定” 更改。
* 提交消息 - 這是我們可以添加的注釋,用于解釋更改的內容。
現在,單擊*提交所有*按鈕,因為我們要提交所有更改,并在提交消息內輸入類似 “首次提交!” 的內容并單擊*提交*。 我們所有的資源現在都應該有綠色勾號,這意味著沒有找到任何修改。
It is worth noting that as you work within this window, the various Staged and Unstaged messages will be prefixed by a symbol. The symbol being used will vary depending on the operation and file, with the following being used:
* \[...\]\- Staged Change (was previously\[A\])
* \[+\]\- Newly Added
* \[->\]\- Renamed/Moved
* \[-\]\- Removed
* \[M\]\- Unstaged Changes
* \[?\]\- Untracked File
* \[!\]\- Missing File
我們的工作流程現在可以開始,我們可以開始構建我們的項目并保存和提交更改,就像我們在上面的段落中所做的那樣。
工作一段時間后,你可能希望檢查并查看你在任何給定時間所做的事情,因此你需要打開**提交歷史記錄**要打開歷史記錄窗口,只需轉到*源代碼管理*\>*查看歷史記錄*,打開另一個包含三個窗格的窗口:
:-: 
頂部窗格描述了提交,中間窗格描述了為選定提交提供的注釋,底部窗格描述了在此提交中已修改的文件。請注意,如果你已設置了**差異工具**,則雙擊此窗口中的任何文件將打開差異工具,你將能夠看到文件之間的更改。
### 還原文件
上面你已經看到了如何創建一個存儲庫并向它提交,但是如果你犯了一個錯誤并想要 “回滾” 到之前的提交會發生什么呢?讓我們故意做一個錯誤,然后看看我們如何處理它......
首先創建一個新資源 - 在這個例子中我們將創建一個腳本資源 - 最初你將看不到狀態圖標,因為就源代碼管理而言它還不存在。在腳本資源中添加一行簡單的代碼,如:
```
show_debug_message("Hello World");
```
如果現在關閉代碼編輯器,腳本將保存,修改后的文件圖標將顯示在資源樹中。現在,打開提交窗口,你將看到有四個可提交更改,因為會自動添加新資源:
:-: 
可提交更改如下:
* .yyp 項目文件
* 視圖文件(view file)
* GML 腳本本身
* 引用腳本的 .yy 文件
你應該輸入提交消息,然后單擊*提交*按鈕,就像我們之前解釋的那樣。 現在,我們回到腳本并將代碼行更改為(例如):
```
show_debug_message("Hello World, how are you?");
```
當我們關閉代碼編輯器時,腳本旁邊會再次顯示一個紅色圖標,但我們已經意識到我們的代碼出錯了,我們想回滾到以前的版本來修復它(顯然,你可能只是打開腳本并輕松修復它,因為示例非常簡單,但在大型項目中通常不是一種可行的方法)。 我們需要做的是*恢復*我們的更改。
要還原更改,我們首先需要再次打開提交窗口,因此我們再次進入*源代碼管理*\>*提交更改*。 我們更改的文件將再次準備好進行提交,但這不是我們想要的,所以我們單擊*不提交所有*按鈕將其從暫存區域中取出。
如果我們現在右鍵單擊我們更改的文件,我們將獲得一個上下文菜單,其中包含**還原路徑**選項:
:-: 
選擇此選項后,你將文件還原為它們所處的先前狀態。
**重要!**當你還原時,由于文件檢查器檢測到磁盤上的更改,你將收到一條消息,要求你重新加載或保存當前項目:你**必須**點擊**重新載入**而不保存,因為保存將保存內存而不是重新載入恢復的文件。
這對于編輯某些內容并且想要在沒有執行提交的情況下進行更改時非常有用,但是當你提交了一個或多個更改并希望回滾到之前的提交時呢? 那么,讓我們再次編輯我們的腳本:
```
show_debug_message("This is a bad idea");
```
現在我們像以前一樣提交它以使其受源代碼管理。所以,這是一個壞主意并且我們想要回滾,這意味著首先我們需要再次打開*源代碼管理*\>*查看歷史*窗口。我們將在此窗口中看到所有先前提交的列表,從初始提交,腳本提交開始,然后提交我們編輯為 “bad idea” 的腳本:
我們現在有兩個選擇。 我們可以還原整個修訂版本 - 這將修改*所有*已更改為所選提交文件的文件 - 或者我們可以選擇還原路徑 - 這將只恢復單個文件。讓我們做第一個選擇:
* 右鍵單擊*提交歷史*窗格中的第二個提交(“Hello World”提交)。
* 選擇*還原到這次修訂*,然后在警告消息上選擇**重新加載**。
你應該看到腳本現在有一個紅色狀態圖標,如果我們打開它,我們將有以下內容:
:-: 
然后我們可以對項目進行提交,我們將再次回到原來的位置。 但是,我們也可以撤消該文件的操作,并通過執行以下操作讓我們的 “壞主意” 提交回來:
* 打開*提交更改*窗口。
* 選擇不提交 "Hello World" 代碼腳本。
* 右鍵單擊并選擇*還原路徑*。
現在我們又回到了項目中的錯誤文件! 好吧,我們可以借此機會僅恢復該文件路徑,而不是將所有內容都重新修改為以前的版本。 為此我們需要做以下事情:
* 打開*查看歷史*窗口
* 單擊第二個提交(“Hello World”提交)。
* 右鍵單擊**提交中修改的文件**窗格中的 GML 腳本,然后選擇*還原路徑*。
我們將會回到我們的 “Hello World” 代碼,然后我們可以再次使用更正的文件更新源代碼管理。
### 克隆存儲庫
當你的項目存儲在外部存儲庫中時,你需要記住*推送(push)*更改并*拉取(pull)*任何新更改。這樣做的原因是,當你提交時,你可以在本地存儲更改,這樣你就可以遠離網絡連接并在準備就緒時進行同步,并且可以同步將更改推送到遠程存儲庫。拉取更改意味著你希望將其他人從遠程存儲庫中所做的任何更改提取到本地存儲庫中。但是,這意味著有時候人們可以編輯*相同*的文件,從而產生**合并沖突**。你需要知道如何處理這些沖突,所以我們現在要刻意創建一個,然后告訴你如何處理它。
> **注意**:不建議共享本地項目存儲庫(甚至通過像 Dropbox 這樣的文件同步服務),因為提交通常直接寫入它,因此你幾乎沒有沖突保護。
為了產生我們的沖突,我們首先需要有兩個本地存儲庫,一個用于主存儲庫,一個用于我們的副本。要創建它,我們需要**克隆**存儲庫,這是通過以下步驟完成的:
* 轉到*源代碼管理*\>*克隆存儲庫*。
* 在URL字段中,鍵入我們在上面的 “還原文件” 指南中設置的項目的路徑(默認情況下,這將是C:\\Users\\Documents\\GameMakerStudio2\\).
:-: 
* 然后,你需要設置克隆到的路徑:
:-: 當你單擊“確定”按鈕時,你將收到有關嘗試克隆 “非裸” 存儲庫的以下警告:
:-: 你可以再次點擊“確定”。
* 現在,你將看到一個目錄資源管理器創建了一個 “裸” 代理存儲庫(例如,這是一個*可以*安全地存儲在 Dropbox 上的存儲庫)。瀏覽到要創建此代理存儲庫的位置,然后選擇(或創建)要使用的文件夾。
完成后,*GameMaker Studio 2*會將原始項目推送到代理,然后將新項目拉到你在克隆存儲庫窗口中設置的路徑,然后自動打開文件瀏覽器,以便打開存儲的項目。 如果你現在轉到*源代碼管理*\>*查看歷史*,我們將看到我們的原始提交以及新的 “推送克隆”:
:-: 
你現在已經克隆了存儲庫,可以繼續處理項目的本地版本。
### 沖突
在本節中,我們將討論解決克隆的本地存儲庫和主存儲庫之間的沖突(有關更多詳細信息,請參閱克隆部分)。 假設你現在正在使用本地存儲庫,我們需要編輯一個文件然后導致某種沖突,因此打開我們一直使用的測試腳本并將 “Hello World” 消息更改為以下內容:
show\_debug\_message("Hello World, How Are You?");
你現在應該保存項目并將其提交到本地存儲庫。 現在,由于我們鏈接到遠程主存儲庫(即使它是我們克隆到同一磁盤的存儲庫),我們需要執行**推送**以更改主存儲庫。為此,請轉到*源代碼管理*\>*推送更改*,這將在源代碼管理[輸出選項卡](https://gamemakerchina.github.io/GMS2_manual_en2ch/source/_build/2_interface/2_extras/output.html)中為我們提供狀態更新:
:-: 
我們現在需要打開我們的*原始*項目(而不是克隆的項目),因此瀏覽到將其保存在磁盤上的位置 - 或者只需檢查*文件*菜單中的*最近項目*,因為它應該直接在當前項目下 - 并將其加載到*GameMaker Studio 2*。一個檢查你的項目是正確的簡單方法是檢查你的腳本,如果消息是 “Hello World”,那么你的項目是正確的,或者你可以打開*查看歷史*窗口并檢查。
你現在需要再次編輯腳本,因此請修改為:
```
show_debug_message("This will cause a conflict.");
```
這可以保存到磁盤,并提交更改,但如果你嘗試推送這些更改,你將收到以下消息:
:-: 
有人已經推送了你還沒有的變化! 這意味著你需要對存儲庫進行拉取并查看問題究竟是什么,因此請轉到*源代碼管理*\>*拉取更改*。這將顯示兩個窗口,第一個是關于已更改文件的警告(與之前的操作一樣,你希望選擇此處**重新加載**而*不是*保存),另一個是 “沖突” 窗口:
:-: 
此窗口將在左側列表中顯示沖突的文件,你可以使用鼠標左鍵從該列表中選擇文件(或使用+選擇多個文件)。 你有四種處理沖突文件的選項,可從右側的按鈕獲得:
* **使用他們的**\- 這將覆蓋你使用遠程存儲庫中的更改所做的更改。
* **使用我的**\- 這將取消遠程存儲庫中你剛剛創建的更改。
* **合并**\- 這將嘗試打開外部合并工具來處理沖突。
* **選擇合并工具**\- 這將允許你配置合并工具(有關詳細信息,請參閱下面的使用外部合并工具一節)。
現在,你可以使用按鈕來解決沖突,但在此之前,讓我們打開沖突的文件以確切了解問題所在。 如果你打開沖突的腳本,它現在將如下所示:
:-: 
在**HEAD**文件將顯示 “This Will Cause A Conflict”(這是我們推送到本地存儲庫)和從遠程存儲庫**master**中拉取的 “Hello World,How Are You?”。你可以立即返回*沖突*窗口,然后單擊*使用他們額*以拉取已更改的文件并覆蓋當前的 HEAD 文件。 該腳本現在將被標記為已更改,你應該在繼續之前執行新的提交和推送。
請注意,我們可以在*GameMaker Studio 2*IDE中實際修復此問題。 如果我們刪除第 1、2、3、5 行,那么我們只剩下show\_debug\_message("Hello World, How Are You?")并保存它,它將清除沖突,因為 Git 會認為你知道你在對你自己的文件做什么。 它容易出錯,因此建議安裝合并工具,然后配置并使用它,而不是手動嘗試合并。
### 設置外部合并 / 差異工具
當你與其他人一起處理項目時,總會有可能發生沖突,因為多人編輯同一個文件,并且大多數源代碼管理系統可以很好地嘗試合并任何沖突的文件,但是當在同一個地方有變化時 ,它需要一些幫助才能知道該做什么 - 此時**合并工具**將向你展示更改的地方,讓你自己決定。
由于每個合并工具都不同,因此有四個宏可用于指定文件,可以通過從*沖突*窗口單擊按鈕*選擇合并工具*設置文件:
:-: 
當你單擊該按鈕時,將在 Git 插件上打開**偏好設置**窗口:
:-: 
在這里,你提供了所選合并工具的路徑,然后提供了一個*合并工具選項*宏,以便在決定要執行的操作時使用以下選項:
* ${scm\_mine}: 你的版本的路徑
* ${scm\_thers}: 其它版本的路徑
* ${scm\_base}: 發生沖突更改之前的版本路徑
* ${scm\_merged}: 合并工具應保存到的路徑
作為設置的幫助,當你提供某些合并工具的路徑時,*GameMaker Studio 2*將填寫一些默認值以開始使用,具體取決于所選的工具:
* KDiff3:${scm\_theirs} ${scm\_mine} -o ${scm\_merged}
* Meld:${scm\_mine} ${scm\_merged} ${scm\_theirs}
* Notepadd++:${scm\_merged}
* TortoiseMerge:/base:${scm\_base} /theirs:${scm\_theirs} /mine:${scm\_mine} /merged:${scm\_merged}
請注意,如果你沒有(或不想使用)合并工具,則可以在 IDE 中打開腳本并嘗試從那里(手動)修復它。
所以,回到我們的示例沖突,如上面關于沖突的部分所述... 你已經從 master 完成了拉取,其中一個文件是沖突的。這將打開 “源代碼管理沖突” 窗口,你可以在其中單擊沖突的腳本,然后單擊 “合并”,因為你已配置了合并工具。現在單擊合并將打開你可以處理沖突的工具,然后使用提供的宏來進行所需的更改。完成并關閉合并工具后,*GameMaker Studio 2*IDE 將顯示以下確認窗口:
:-: 
只需對此提示回答 “是”,因為你剛剛使用合并工具完成此操作,然后你需要提交此更改以表示合并操作的結束(*源代碼管理*\>*提交更改*。提交窗口現在將顯示合并正在進行中以及顯示一些未提交更改的文件:
:-: 
這些未提交更改的文件是我們的腳本文件,添加了.base、.ours和.theirs。 我們可以安全地刪除所有這些,因此請單擊頂部的一個,然后單擊底部的+以全部選中它們。接下來,右鍵單擊所選文件,然后選擇*刪除路徑*將其刪除。 還有一個預先填寫的提交消息,說明這是一個合并,并且存在沖突(你可以添加或根據需要編輯它)。
你現在可以單擊*提交*。
由于你可能存在其他文件的問題,這意味著使用遠程或共享存儲庫時的工作流程應如下所示:
產生更改 保存 提交 拉取 合并 推送
你還應該設置一個差異工具(Diff Tool),以便在提交到存儲庫時使用。這是從**偏好設置**設置的,與合并工具相同:
:-: 
差異工具的配置方式與合并工具的配置方式大致相同,但僅使用${scm\_base}和${scm\_theirs}選項 - 在這種情況下,${scm\_base}表示未修改的文件,而${scm\_theirs}表示當前文件的狀態。*工具選項*應預先填充*Meld*、*KDiff3*和*TortoiseMerge*的默認選項,就像它們用于合并工具一樣。請注意,*GameMaker Studio 2*不支持輸出單個文件差異補丁,因此*Notepad++*沒有默認值。
要使用差異工具查看當前和以前版本之間的更改,只需打開**提交**窗口,然后雙擊文件。如果工具設置正確,它將啟動,你將能夠看到文件之間的更改。
## 源代碼管理上下文菜單
當你為任何項目激活源代碼管理時(有關詳細信息,請參閱上面的*設置源代碼管理 Git 插件*一節),*GameMaker Studio 2*將在頂部顯示以下上下文菜單:
:-: 
在這里,我們概述了每個可用的選項(其中大部分在上面的教程部分中有更深入的解釋):
* **創建項目存儲庫**: 此選項允許你在與項目文件相同的目錄中創建本地存儲庫。
* **將項目導入存儲庫中**: 此選項允許你將項目導入外部存儲庫。
* **克隆存儲庫**: 此選項允許你將存儲庫從源代碼克隆到新目標。
* **提交更改**: 使用此選項,你可以在項目中暫存已更改的文件,然后將它們提交到存儲庫。
* **推送更改**: 執行提交或合并后,此選項用于將更改推送到主存儲庫。
* **拉取更改**: 使用此選項,你可以通過從主存儲庫中拉取已更改的文件來更新本地存儲庫。
* **查看歷史**: 這將打開歷史記錄窗口,你可以在其中查看項目的所有版本歷史記錄,并選擇回滾特定文件路徑或整個修訂版本。
* **顯示沖突**: 這將打開 “沖突” 窗口并列出項目中可能存在的任何沖突文件,允許你通過*GameMaker Studio 2*IDE 或使用特定的**合并工具**來處理它們。
- 介紹
- 新手須知
- 版本授權
- 安裝
- 更新
- 發布日志
- 所需SDK
- 賬號
- 首選項設置
- 拖拽編程
- 擴展編輯器設置
- 基本項設置
- 圖片編輯器設置
- 語言設置
- 市場設置
- 對象編輯器設置
- 插件設置
- 資源樹設置
- 場景編輯器設置
- 運行庫設置
- 樣條編輯器設置
- 精靈編輯器設置
- 文本編輯器設置
- 瓷片編輯器設置
- 時間軸設置
- 輸入
- 快速上手
- 概覽
- 啟動頁
- 工作區
- 資源樹
- 工作流
- 創建精靈
- 創建瓷片集
- 創建音頻
- 創建對象
- 創建場景
- 編譯
- 調試
- 快捷鍵
- 菜單
- 文件菜單
- 編輯菜單
- 構建菜單
- 窗口菜單
- 工具菜單
- 市場菜單
- 幫助菜單
- 布局菜單
- 附加信息
- 位運算符和二進制
- 命令行
- 出錯信息
- 文件系統
- 導入非位圖精靈
- JSDoc使用
- 微型WEB服務端
- 過時函數
- 紋理頁
- 使用緩沖區
- 編輯器
- 擴展編輯器
- 字體編輯器
- 圖像編輯器
- 內含文件編輯器
- 備注編輯器
- 對象編輯器
- 路徑編輯器
- 場景編輯器
- 腳本編輯器
- 著色器編輯器
- 音頻編輯器
- 精靈編輯器
- 瓷片集編輯器
- 時間軸編輯器
- 對象可用事件
- 異步事件
- 繪制事件
- 手勢事件
- 其它
- 調試管理器
- 設備管理器
- YoYo資源市場
- 輸出停靠欄
- 項目圖生成器
- 最近使用窗口
- 遠程工作
- 混音器
- 版本控制
- 設置項
- 音頻組
- 配置項
- 跨平臺配置
- 紋理組
- 游戲配置選項
- AmazonFire 配置
- Android配置
- HTML5配置
- iOS配置
- Linux配置
- Mac配置
- Windows配置
- WindowsUWP配置
- 腳本編程
- 拖放編程概覽
- 拖放編程功能索引
- GML概覽
- 代碼
- 數組
- array_create
- array_copy
- array_equals
- array_length_1d
- array_height_2d
- array_length_2d
- 賦值
- 表達式
- 數據存取
- 功能性語法
- 函數
- 腳本
- 注釋
- 關鍵詞
- 變量及作用域
- variable_global_exists
- variable_global_get
- variable_global_set
- variable_instance_exists
- variable_instance_get
- variable_instance_get_names
- variable_instance_set
- 尋址變量
- 評估順序
- 數據類型
- is_array
- is_bool
- is_int32
- is_int64
- is_matrix
- is_ptr
- is_real
- is_string
- is_undefined
- is_vec3
- is_vec4
- 變元計數
- 指針
- 內置變量屬性
- async_load
- health
- lives
- score
- GML函數索引
- asset_get_index
- asset_get_type
- Compatibility_Functions
- Asynchronous Functions
- Audio
- Buffers
- Cameras And Display (攝像機和顯示)
- Cameras(攝像機)
- camera_apply
- camera_create
- camera_create_view
- camera_destroy
- camera_get_active
- camera_get_begin_script
- camera_get_default
- camera_get_end_script
- camera_get_proj_mat
- camera_get_update_script
- camera_get_view_angle
- camera_get_view_border_x
- camera_get_view_border_y
- camera_get_view_height
- camera_get_view_mat
- camera_get_view_speed_x
- camera_get_view_speed_y
- camera_get_view_target
- camera_get_view_width
- camera_get_view_x
- camera_get_view_y
- camera_set_begin_script
- camera_set_default
- camera_set_end_script
- camera_set_proj_mat
- camera_set_update_script
- camera_set_view_angle
- camera_set_view_border
- camera_set_view_mat
- camera_set_view_pos
- camera_set_view_size
- camera_set_view_speed
- camera_set_view_target
- view_camera
- view_current
- view_enabled
- view_get_camera
- view_get_hport
- view_get_surface_id
- view_get_visible
- view_get_wport
- view_get_xport
- view_get_yport
- view_hport
- view_set_camera
- view_set_hport
- view_set_surface_id
- view_set_visible
- view_set_wport
- view_set_xport
- view_set_yport
- view_surface_id
- view_visible
- view_wport
- view_xport
- view_yport
- The Screen Display
- Controls
- Data_Structures(數據結構)
- ds_exists
- ds_set_precision
- DS Grids
- DS Lists(列表)
- ds_list_create
- ds_list_destroy
- ds_list_clear
- ds_list_empty
- ds_list_size
- ds_list_add
- ds_list_set
- ds_list_delete
- ds_list_find_index
- ds_list_find_value
- ds_list_insert
- ds_list_replace
- ds_list_shuffle
- ds_list_sort
- ds_list_copy
- ds_list_read
- ds_list_write
- ds_list_mark_as_list
- ds_list_mark_as_map
- DS Maps(映射表)
- ds_map_exists
- ds_map_create
- ds_map_add
- ds_map_clear
- ds_map_copy
- ds_map_replace
- ds_map_delete
- ds_map_empty
- ds_map_size
- ds_map_find_first
- ds_map_find_last
- ds_map_find_next
- ds_map_find_previous
- ds_map_find_value
- ds_map_read
- ds_map_write
- ds_map_destroy
- ds_map_secure_save
- ds_map_secure_save_buffer
- ds_map_secure_load
- ds_map_secure_load_buffer
- ds_map_add_list
- ds_map_add_map
- ds_map_replace_list
- ds_map_replace_map
- DS Priority Queues
- DS Queues
- DS Stacks
- Debugging
- Drawing
- draw_enable_drawevent
- draw_flush
- Colour(顏色)
- colour_get_blue
- colour_get_green
- colour_get_hue
- colour_get_red
- colour_get_saturation
- colour_get_value
- draw_clear
- draw_clear_alpha
- draw_get_alpha
- draw_get_colour
- draw_getpixel
- draw_getpixel_ext
- draw_set_alpha
- draw_set_colour
- make_colour_hsv
- make_colour_rgb
- merge_colour
- Forms
- draw_arrow
- draw_button
- draw_circle
- draw_circle_colour
- draw_ellipse
- draw_ellipse_colour
- draw_healthbar
- draw_line
- draw_line_colour
- draw_line_width
- draw_line_width_colour
- draw_path
- draw_point
- draw_point_colour
- draw_rectangle
- draw_rectangle_colour
- draw_roundrect
- draw_roundrect_colour
- draw_roundrect_colour_ext
- draw_roundrect_ext
- draw_set_circle_precision
- draw_triangle
- draw_triangle_colour
- GPU
- gpu_get_alphatestenable
- gpu_get_alphatestref
- gpu_get_blendenable
- gpu_get_blendmode
- gpu_get_blendmode_dest
- gpu_get_blendmode_destalpha
- gpu_get_blendmode_ext
- gpu_get_blendmode_ext_sepalpha
- gpu_get_blendmode_src
- gpu_get_blendmode_srcalpha
- gpu_get_colorwriteenable
- gpu_get_cullmode
- gpu_get_fog
- gpu_get_state
- gpu_get_texfilter
- gpu_get_texfilter_ext
- gpu_get_texrepeat
- gpu_get_texrepeat_ext
- gpu_get_zfunc
- gpu_get_ztestenable
- gpu_get_zwriteenable
- gpu_pop_state
- gpu_push_state
- gpu_set_alphatestenable
- gpu_set_alphatestref
- gpu_set_blendenable
- gpu_set_blendmode
- gpu_set_blendmode_ext
- gpu_set_blendmode_ext_sepalpha
- gpu_set_colorwriteenable
- gpu_set_cullmode
- gpu_set_fog
- gpu_set_state
- gpu_set_texfilter
- gpu_set_texfilter_ext
- gpu_set_texrepeat
- gpu_set_texrepeat_ext
- gpu_set_zfunc
- gpu_set_ztestenable
- gpu_set_zwriteenable
- Lighting
- draw_get_lighting
- draw_light_define_ambient
- draw_light_define_direction
- draw_light_define_point
- draw_light_enable
- draw_light_get
- draw_light_get_ambient
- draw_set_lighting
- Mipmapping
- gpu_get_tex_max_aniso
- gpu_get_tex_max_aniso_ext
- gpu_get_tex_max_mip
- gpu_get_tex_max_mip_ext
- gpu_get_tex_min_mip
- gpu_get_tex_min_mip_ext
- gpu_get_tex_mip_bias
- gpu_get_tex_mip_bias_ext
- gpu_get_tex_mip_enable
- gpu_get_tex_mip_enable_ext
- gpu_get_tex_mip_filter
- gpu_get_tex_mip_filter_ext
- gpu_set_tex_max_aniso
- gpu_set_tex_max_aniso_ext
- gpu_set_tex_max_mip
- gpu_set_tex_max_mip_ext
- gpu_set_tex_min_mip
- gpu_set_tex_min_mip_ext
- gpu_set_tex_mip_bias
- gpu_set_tex_mip_bias_ext
- gpu_set_tex_mip_enable
- gpu_set_tex_mip_enable_ext
- gpu_set_tex_mip_filter
- gpu_set_tex_mip_filter_ext
- Particles
- Particle Emitters
- part_emitter_burst
- part_emitter_clear
- part_emitter_create
- part_emitter_destroy
- part_emitter_destroy_all
- part_emitter_exists
- part_emitter_region
- part_emitter_stream
- Particle Systems
- part_particles_clear
- part_particles_count
- part_particles_create
- part_particles_create_colour
- part_system_automatic_draw
- part_system_automatic_update
- part_system_clear
- part_system_create
- part_system_create_layer
- part_system_depth
- part_system_destroy
- part_system_draw_order
- part_system_drawit
- part_system_exists
- part_system_get_layer
- part_system_layer
- part_system_position
- part_system_update
- Particle Types
- part_type_alpha1
- part_type_alpha2
- part_type_alpha3
- part_type_blend
- part_type_clear
- part_type_colour_hsv
- part_type_colour_mix
- part_type_colour_rgb
- part_type_colour1
- part_type_colour2
- part_type_colour3
- part_type_create
- part_type_death
- part_type_destroy
- part_type_direction
- part_type_exists
- part_type_gravity
- part_type_life
- part_type_orientation
- part_type_scale
- part_type_shape
- part_type_size
- part_type_speed
- part_type_sprite
- part_type_step
- Simple Effects
- ef_cloud
- ef_ellipse
- ef_explosion
- ef_firework
- ef_flare
- ef_rain
- ef_ring
- ef_smoke
- ef_smokeup
- ef_snow
- ef_spark
- ef_star
- effect_clear
- effect_create_above
- effect_create_below
- Primitives(基本幾何體)
- draw_primitve_begin
- draw_primitive_begin_texture
- draw_primitive_end
- draw_vertex
- draw_vertex_colour
- draw_vertex_texture
- draw_vertex_texture_colour
- Primitive Building
- vertex_argb
- vertex_begin
- vertex_colour
- vertex_create_buffer
- vertex_create_buffer_ext
- vertex_create_buffer_from_buffer
- vertex_create_buffer_from_buffer_ext
- vertex_delete_buffer
- vertex_end
- vertex_float1
- vertex_float2
- vertex_float3
- vertex_float4
- vertex_freeze
- vertex_get_buffer_size
- vertex_get_number
- vertex_normal
- vertex_position
- vertex_position_3d
- vertex_submit
- vertex_texcoord
- vertex_ubyte4
- Vertex Formats
- vertex_format_add_colour
- vertex_format_add_custom
- vertex_format_add_normal
- vertex_format_add_position
- vertex_format_add_position_3d
- vertex_format_add_textcoord
- vertex_format_begin
- vertex_format_delete
- vertex_format_end
- Sprites_and_Tiles
- draw_enable_swf_aa
- draw_get_swf_aa_level
- draw_self
- draw_set_swf_aa_level
- draw_skeleton
- draw_skeleton_collision
- draw_skeleton_instance
- draw_skeleton_time
- draw_sprite
- draw_sprite_ext
- draw_sprite_general
- draw_sprite_part
- draw_sprite_part_ext
- draw_sprite_pos
- draw_sprite_stretched
- draw_sprite_stretched_ext
- draw_sprite_tiled
- draw_sprite_tiled_ext
- draw_tile
- draw_tilemap
- Surfaces
- application_get_position
- application_surface
- application_surface_draw_enable
- application_surface_enable
- application_surface_is_enabled
- draw_surface
- draw_surface_ext
- draw_surface_general
- draw_surface_part
- draw_surface_part_ext
- draw_surface_stretched
- draw_surface_stretched_ext
- draw_surface_tiled
- draw_surface_tiled_ext
- surface_copy
- surface_copy_part
- surface_create
- surface_create_ext
- surface_exists
- surface_free
- surface_get_height
- surface_get_texture
- surface_get_width
- surface_getpixel
- surface_getpixel_ext
- surface_reset_target
- surface_resize
- surface_save
- surface_save_part
- surface_set_target
- surface_set_target_ext
- The Application Surface
- Text
- draw_highscore
- draw_set_font
- draw_set_halign
- draw_set_valign
- draw_text
- draw_text_colour
- draw_text_ext
- draw_text_ext_colour
- draw_text_ext_transformed
- draw_text_ext_transformed_colour
- draw_text_transformed
- draw_text_transformed_colour
- Textures
- draw_texture_flush
- texture_get_height
- texture_get_texel_height
- texture_get_texel_width
- texture_get_uvs
- texture_get_width
- texture_global_scale
- texture_set_stage
- File Handing
- Fonts
- Game
- In App Purchases
- Instances
- 數學運算(Maths)
- Date and Time
- 數字方法(Number Functions)
- Vector Functions
- Matrices
- Miscellaneous
- Movement and Collisions
- Networking
- Objects
- Paths
- Physics
- 場景(Rooms)
- 常規的場景函數及變量(General Room Functions And Varibales)
- 常規圖層函數(General Layer Functions)
- 瓷片函數(TIlemap Tile Functions)
- 背景圖層(Backgrounds)
- 精靈圖層(Sprites)
- Scirpts
- Shaders
- Sprites
- Steam API
- Strings
- Timelines
- Web
- XBox_Live
- 翻譯名詞對照表