[TOC]
* * * * *
## 場景編輯器(Room Editor)

場景編輯器就是你用來設計打造游戲場景的地方(似乎也有人默認翻譯為游戲房間)。每個游戲至少需要一個場景才能運行,而在一個場景中,你可以放置實例、精靈、瓷片和背景等各種元素。這些不同的素材都會放置到各自對應的圖層(Layer)上,這些層在圖層編輯器中可以進行排序。由于本編輯器功能十分復雜,我們首先會簡要介紹比較重要的內容,然后你可以從下面尋找更多詳細信息。
在創建場景資源時,你只需要在資源樹中右鍵單擊打開場景菜單即可,這里還允許你創建子場景(參考下方的繼承部分內容),打開房間屬性進行修改,添加新的資源以更好的構建、重命名或刪除場景。請注意,你可以在資源樹中單擊拖動場景以進行場景排序,也可以講一個場景拖到另一個場景上作為附屬場景(這樣會使該附屬場景縮進在主場景下方),或將其拖動到文件夾中進行管理。
請注意,場景編輯器本身就有一個獨立的工作區,因此你可以點擊該標簽拖拽以創建一個獨立的主窗口,這樣可以單獨放到另一臺顯示器中以方便工作。你也可以將標簽拖回IDE頂部來將其放回主窗口。
### 界面(Interface)
場景編輯器的操作界面簡單的劃分成了幾個易于理解的區域。這些不同的編輯區域同時放置在工作區中——場景屬性、圖層編輯器以及不同的圖層屬性等——但也可以直接通過拖拽操作來生成獨立的窗口,或將獨立的窗口再放置到工作區的側面或底部。
#### 圖層編輯器(Layer Editor)

場景編輯器中所有的內容都是放置在不同的圖層之中的。每個圖層還有一個獨立的“深度”屬性,在圖層列表中靠下方的圖層在顯示時會被上方的圖層所覆蓋
> 重要提示:深度可以從-16000到16000之間任意設置,超出這個深度范圍的內容都不會顯示出來,但各種事件依然有效。
單擊圖層編輯器底部對應的按鈕可以直接創建相應圖層:
* 實例圖層(Instance):這種圖層專門用于放置游戲中的對象實例
* 瓷片圖層(Tile):這種圖層用來繪制瓷片類的精靈元素
* 路徑圖層(Path):這種圖層包含路徑數據(每個圖層只能有一個路徑)
* 素材圖層(Asset):這類圖層用于放置可見素材元素(比如精靈)
* 背景圖層(Background):這種圖層用于定義場景背景,本質就是繪制一張圖片或純色圖像
你還可以點擊文件夾圖標來創建一個圖層文件夾,然后把所選圖層分組進行管理,并使用刪除按鈕來刪除選中圖層,后面我們會單獨介紹每一種不同的圖層。
請注意,你可以切換圖層編輯器的繼承關系,這會影響到圖層的順序和可見性。單擊每個圖層邊的眼睛圖標可以直接設置其自身的可見行,也可以單擊頂部的圖標來統一啟用/禁用所有圖層。你也單擊圖標來“鎖定”圖層(或所有圖層),以免不小心修改了圖層內容。
#### 圖層屬性(Layer Properties)

場景的圖層屬性窗口會根據當前選中的圖層而發生改變。每個窗口匯聚有不同的屬性和列表內容,你可以編輯圖層的顯示方式和圖層上實際的內容(后文圖層一節會詳細說明)
#### 場景屬性(Room Properties)
場景屬性主要有以下三部分內容:
##### 場景設置(Room Settings)

在場景設置中你可以設置繼承切換,可以直接給場景命名,也有是否持久化(Persistent)的選項。通常情況,當你從當前場景跳轉去其他場景以后再回到這個場景,場景是會恢復到初始狀態的。對于大部分游戲來說這種做法沒有任何問題,但再一些RPG或非線性的游戲中可能就不太合適,你希望在不同的場景之間來回切換,并希望場景能保持最后離開時的樣子,這時候選擇“持久化”就可以了。當場景被標記為持久化以后,當你離開后再次回到這個場景,它會與你離開時完全一樣,只有當游戲被重置時才會恢復到初始狀態。要注意,如果這個場景中有對象被你標記為持久化的話,這個實例不會留在這個場景中,而是會跟著移動到你跳轉的場景中去。
一個場景必須有一個尺寸,這是由你輸入的寬度和高度(像素單位)來定義的,設置完畢后,如果有必要,你還可以繼續添加初始化代碼。點擊底部的“初始化代碼(Creation Code)”按鈕會打開一個代碼編輯器,在這里你可以撰寫所有在場景啟動時需要執行的函數和代碼。如果場景本身被標記了持久化,那在后續訪問時不會運行這部分代碼,該代碼只有場景第一次創建時才會觸發。
場景設置中的最后一個按鈕會打開一個設置實例創建順序的窗口:

在這個窗口中會根據創建順序列出場景內所有的實例(從上至下)。如果你需要在某個實例創建之前先創建一個特定實例,你可以直接把它拖到你需要的位置。
##### <div id=room_views>場景視圖(Room Views)</div>

鏡頭視圖提供了這樣一種機制,在屏幕的不同位置繪制出場景的不同區域,或只在屏幕顯示區域繪制場景的一部分。比如說,在大多數平臺游戲中(橫版動作游戲),鏡頭會時刻追蹤主角,因為如果你在屏幕上看到整個關卡會讓主角太小而根本看不見,而且玩家在游戲過程中也不會有任何驚喜感了。在鏡頭視圖中還可以設置多人模式,這里你可以設置一個分屏模式,在不同的鏡頭下看到不同的玩家。有的時候,在游戲中有一些元素需要跟隨鏡頭滾動(比如主角),但其他一些元素則是不動的(比如狀態信息等),這在GameMaker Studio 2中可以通過鏡頭視圖輕松實現。
在視圖屬性的頂部,你可以切換視圖繼承的開關狀態,還有一個用于啟用視圖接口的選項。當你需要在游戲中激活某個視圖之前必須選中這個選項。下面還有一個復選框“清除視圖背景”,這將會用窗口顏色清除應用
注意:你可以在三個主視圖端口設置中分別打開或關閉繼承功能,然后給每個鏡頭視圖獨立切換繼承關系
鏡頭視圖由兩組不同的值進行定義,鏡頭視圖本身以及屏幕上要繪制圖形視圖的端口。這聽起來有些費解,因此在解釋如何下定義之前先簡單說明一下:
* 鏡頭(The Camera):是場景中的一個點,用來設置場景內容如何展示在屏幕上(這是場景編輯器中一個抽象的點,未知會根據視圖和視圖端口的設置自動設置)
* 視圖(The View):根據鏡頭的位置變化顯示鏡頭所見的內容。
* 視圖端口(The View Port):鏡頭視圖在屏幕上顯示的物理區域。

比如說,你可以把一個鏡頭的尺寸設置為640x480然后放到場景中,然后把端口設置成320x240,這個操作會使得鏡頭縮放到320x240的尺寸顯示到屏幕上,你也可以用相同的操作方式把較小的鏡頭窗口放大顯示到屏幕上。通過這個方式,你可以確保不管場景或鏡頭如何變化,但是在屏幕上顯示都是相同的大小。
鏡頭視圖通常都是在場景中的一個矩形區域,以左上角為坐標軸起點,你可以定義鏡頭區域的寬度和高度。然后你需要通過定義視圖端口來去定這個區域在屏幕上的實際顯示尺寸,然后同樣以左上角為起點設置寬高尺寸。你可以同時設置多個端口,并且相互可以重疊,而在此情況下,它們會根據順序依次進行繪制。請務必注意整個屏幕區域必然是個矩形區域,因此即便不同的端口重疊以后顯示出不規則的形狀,最終游戲畫面也會以矩形顯示,沒有端口的區域都將被窗口顏色填充,這意味著在這種情況下,你應當始終注意清除顯示緩存,以確保你的端口間隙沒有被奇怪的圖像填滿。
##### 場景物理屬性(Room Physics)

在使用內置的物理方法之前,你必須勾選此處的“啟用物理”(Enable Physics)選項。一旦你勾選了這個選項,你就可以開始誰物理場景的屬性,這里有一些基本屬性你必須提前設定好,這樣你的場景內才能讓具備物理屬性的對象實例正常運轉。如果想更好的使用物理特性,你可以使用代碼編寫。
接下來你需要設置物理世界的重力屬性。重力的強度和方向是以(0,0)為基點設置的x/y位置的向量。因此如果在x設置0,y設置1則意味著重力方向為向下,速度為1米/秒。最后,你還需要設置GameMaker Studio 2中像素單位和米的比例尺,以此作為物理計算的基礎,你需要不斷調整這個設置,直到你使用的對象的平均像素尺寸約等于所模擬的物理對象尺寸的大小。
#### 工具箱(Toolbox)
某些圖層類型將允許從頂部的工具箱中進行添加操作(比如,瓷片圖層和路徑圖層)。具體說明將在后續圖層介紹中專門介紹。
#### 場景控制(Room Controls)
在場景編輯器的畫布頂部,你會看到幾個控件,它們可以處理顯示內容,他們分別是:
**畫布網格切換**
這個按鈕會開啟/關閉編輯器網格畫布。在GameMaker Studio 2中網格的默認設置是32x32像素,但是當你開啟網格視圖后,菜單中會出現以下選項:

這幾個選項允許你設置網格的顏色、透明度以及單元格尺寸。你還可以再次啟用或禁用網格自動貼合(默認開啟)。你可以使用鍵盤快捷鍵“G”或按住Shift+G來啟用和關閉網格自動貼合
**畫布縮放控制**
這些按鈕可以控制當前畫布的縮放級別,你可以放大或縮小畫布,點擊按鈕可以將正在編輯的圖像畫布縮放至1:1實際大小。你也可以按住“Ctrl”鍵然后滾動鼠標滾路來縮放圖像,同時按下“Ctrl”鍵和“回車鍵”則可以將圖像縮放至1:1實際大小。點擊按鈕則可以直接將圖像縮放至符合當前編輯窗口的尺寸()
**顯示鏡頭邊緣**
點擊這個按鈕可以開啟或關閉鏡頭外框。開啟時你會看到鏡頭區域顯示為一個高亮區域,用以區分場景中的其他區域
**播放動畫**
當你在場景中放置了一些動畫精靈或素材時,你可以在不用編譯整個游戲的情況下,通過點擊這個按鈕來預覽動畫效果以了解實際效果,點擊這個按鈕會同時播放所有帶動畫的資源,再次點擊則會全部停止
**自動選擇畫布**
默認設置下,你在場景中點選不同元素時,是只能選取到當前選中圖層中的資源的,但如果你開啟了這個選項,那你就可以點擊任意資源,然后當前選中的圖層就會自動切換到該資源對應的圖層上。你可以使用鍵盤快捷鍵“P”來臨時開啟本功能(按住P時開啟,松開關閉)
#### 主編輯器(Main Editor)
場景編輯器主窗口是中央區域最大的那塊編輯區,在這里你可以放置對象實例和各種資源,繪制瓷磚和定位路徑位置等。在這里可以滾動鼠標滾輪來放大和縮小視圖,也可以按住鼠標中鍵或同時按住空格和鼠標左鍵并進行拖拽操作來移動場景位置。
在創建資源圖層或實例圖層時,你可以直接從資源樹中拖放對應的資源和實例對象來進行放置。你可以從資源樹中選擇你需要的資源或對象,按住Alt鍵來預覽資源,然后在場景中單擊鼠標左鍵即可添加實例,甚至可以直接像畫畫一樣批量添加。要注意,在使用這種方法批量繪制實例時將會自動貼合場景中的網格設置,但你也可以按住Ctrl鍵以進行手動繪制(松開就會再次自動貼合網格)。
你可以直接從場景編輯器中新建路徑圖層,然后在右側資源樹中創建對應的路徑資源——或者你也可以直接新建一個路徑資源,然后直接把這個路徑拖到主編輯器窗口中,就像拖放實例一樣——然后在編輯器中編輯路徑。至于瓷片組,你可以從瓷片編輯器中直接選取然后在對應圖層上進行繪制。
請注意,你可以通過按住Ctrl和鼠標左鍵一次選擇多個資源來進行批量的移動和刪除操作,而且場景編輯器中大部分資源都是允許直接進行旋轉或縮放操作的(單個或批量都可),只要在資源外框邊緣按住鼠標左鍵不放,然后拖動鼠標即可,你也可以雙擊單個資源(瓷片、實例、精靈都可)直接進入對應的編輯器,然后在其中調整屬性。
#### 狀態欄(Satus Bar)
狀態來主要用于顯示當前窗口中內容的具體信息,狀態欄式中顯示鼠標所在的坐標信息,同時還會顯示當前編輯的圖層,正在使用的工具和該工具的狀態等各種信息。
### 繼承(Inheritance)
在場景編輯器中最重要的功能大概就是這個繼承了,繼承意味著你可以創建一個“父”場景,然后創建一個集成了這個“父”場景所有屬性的“子”場景。這個子場景完全復制了父場景的屬性和設置,緊密相連。這意味著你只需要修改父場景中的鏡頭視圖,或是改變瓷片和實例的數量、位置或任何資源,所有的改變都會作用到相關的子場景中,如下圖所示,你還可以為某些圖層或資源單獨設置開關是否繼承:

可能一下子介紹缺乏足夠的畫面感,我們來看這樣一個例子:比如你在場景中建造了一座城市,中央放了一座城堡。城市和城堡是用不同的瓷片貼圖繪制而成,你還在其中設定了一些NPC的對象實例以及路徑。然后你希望再做一個場景,這個場景跟上面的場景完全一樣,只是其中的城堡被摧毀了。這種情況下你可以照常創建一個初始場景,然后創建一個繼承這個場景的子場景,然后再子場景中把城堡區域的圖層的繼承給關閉,然后重新繪制一個被摧毀的城堡。這樣當玩家進入這個場景時,就會自動繼承父場景中除城堡以外所有的實例和元素。
*重要提示:如果你對任何帶有繼承屬性的內容進行編輯操作,其繼承屬性會自動關閉,而不用特意去點擊按鈕關閉繼承關系*
要創建帶有繼承關系的場景,你只需在原先的場景上點擊右鍵然后選擇創建子場景即可,如下圖:

你還可以從資源樹中把任意場景直接拖放到另一個場景之上,使其變成該場景的子場景(或從父場景中將子場景拉出以斷開繼承關系)。這里要注意,繼承關系是可以多級并行的,整個場景可以繼承,其中的某個圖層也可以繼承,甚至圖層上單個資源也可以單獨設置繼承關系,甚至場景之間也能多級繼承(比如場景C繼承自B,而B則繼承自A)。如果你創建一個除了鏡頭視角設置以外空無一物的場景——那么——你可以把你之后創建的所有場景都定義為該場景的子場景。但是你也可以另外在單獨創建一個基于鏡頭視圖場景為基礎的場景,然后在其中繪制通用的GUI界面和一些控制器,然后再創建子場景來繼承這些GUI和控制器,以及其父場景的鏡頭視圖設置。
如你所見,繼承功能十分強大,當你需要加快項目進程,又希望各個場景盡可能保持清晰時,使用繼承功能可以大量減少你設計場景所消耗的時間。
### 圖層(Layers)
首先明確一點,游戲場景中所有的內容都是放在圖層上的,你可以在圖層編輯器中添加、刪除圖層,也可以在此進行排序操作,并且圖層分為幾種不同的類型,每一種圖層都有自己的設置和運作方式。每種圖層的數量是沒有限制的,并且你可以同時放置不同類型的圖層。每種類型的圖層都有自己的屬性窗口,你還可以設置圖層的可見性(不可見的圖層不會在運行時消耗資源,并且可以隨時通過設置屬性來改變可見性)。

上圖是圖層編輯器,上方列表中是各種不同類型的圖層,創建圖層的按鈕則在底部。你可以重命名任何圖層(僅可用字母、數字和下劃線),還可以單擊右側的眼睛圖標來切換圖層的可見性。如果當前場景是從父場景中繼承的圖層,則可在底部切換繼承關系,但要注意,這個設置會影響所有圖層。你也可以按住shift或ctrl然后通過鼠標左鍵多選圖層來批量刪除。
為了使圖層條理清晰,你可以單擊添加文件夾圖標來創建一個圖層組。你也可以點擊刪除圖標來刪除圖層。所有的圖層都有一個“深度”屬性,這個屬性定義了該圖層在場景中所處的位置,深度值低的圖層會覆蓋在深度值高的圖層上方,因此一個深度為-100的圖層會覆蓋在一個深度為200的圖層之上。
*重要提示:深度值的最小和最大值分別是-16000和16000,任何超出這個范圍的圖層都不會顯示出來,但其事件都還會正常觸發。*
如果你在圖層上單擊右鍵,會顯示下列圖層菜單:

在這里你可以打開所選圖層的屬性窗口,刪除圖層,重命名圖層或復制圖層。還可以添加子圖層,如果你選擇添加子圖層,當前圖層將會變成“文件夾”圖標,用以表明其有附屬的子圖層,并在其中創建新的圖層。然后你可以選擇子層是否繼承父層屬性以及可見性。
請注意,你可以在這個窗口中直接按住某個圖層向上或向下拖動來調整圖層的順序,也可以按住shift然后左鍵選擇兩個圖層(兩個圖層之間所有的圖層都會被選中)或用Ctrl和左鍵來自定義多選圖層。如果你把幾個圖層拖放到某個圖層文件夾之上,這些圖層都會被移入文件夾顯示為子圖層。你也可以鎖定圖層以避免圖層被不小心修改掉。
*注意:在編輯器窗口中你必須在不同的圖層上放置不同的素材,你也可以按住P鍵來快速選中任何圖層種的資源(這樣可以免除先選中圖層的操作)*
#### 背景圖層(Background Layer)
你可以單擊背景圖層按鈕來添加新的背景圖層,這個操作會添加一個新的圖層,然后打開背景圖層屬性窗口:

當你創建一個新的背景圖層時,默認是個空的沒有任何素材的圖層,如果你不給背景圖層設定專用的精靈圖片,那就只會顯示默認的背景色。你也可以點擊選色器來修改這個顏色。如果你選定了一個精靈,你還可以選擇下方的平鋪選項,可以在水平方向或垂直方向鋪滿整個場景,或者直接將圖片縮放以填滿整個場景。
#### 實例圖層(Instance Layer)
你可以單擊實例圖層按鈕來添加新的背景圖層,這個操作會添加一個新的圖層,然后打開實例圖層屬性窗口:

這個窗口僅顯示當前圖層中所有實例的列表,你可以打開資源樹,然后把對象拖到場景編輯器中,或在資源樹中直接選擇一個實例然后按住“Alt”鍵來進行預覽,然后在場景中單擊左鍵就會在點擊的位置生成一個對應的實例,你甚至可以用這個方法拖動鼠標直接“繪制”實例。
在列表中單擊并拖拽實例位置可以進行排序操作,但要注意這個排序僅僅是在編輯器中方便查閱,如果需要控制實例的創建順序,需要在場景的設置窗口或菜單中打開排序窗口(下文有介紹)。
雙擊任意實例——無論在編輯器中或是在本列表中皆可——就會打開下面的窗口,這個窗口可以修改實例的部分屬性:

在這里你可以修改唯一ID,設置是否從父場景進行繼承,或是要單獨設置實例屬性。你還可以打開這個實例的對象編輯器,活在當前窗口修改實例的部分顯示特征,包括顏色、旋轉角度、翻轉模式(水平/垂直)。你甚至可以縮放高寬的任一值或是設定其坐標位置。
最后,你也可以給實例創建一些代碼,這些代碼會在對象“創建事件”的代碼之后運行,并且僅對這一個實例起效(因此,你可以在對象中設置所有實例的變量,然后在這里進行修改以確保唯一值)。單擊創建代碼的按鈕將打開一個代碼編輯窗口,你可以在此添加或修改任何變量,要注意,你可以獨立于場景繼承關系單獨切換這個代碼的繼承關系。
另外要注意,當導出游戲時,圖層上的實例都會被自動標記為需要導出,然而你可能并不希望某個實例最后出現在某個場景中,這種時候你只需要在實例左側的導出復選框中取消選中即可,但是要注意,如果你的代碼中有引用這個實例的內容會導致游戲無法允許,需謹慎使用。
#### 瓷片圖層(Tile Layer)
你可以單擊背景圖層按鈕來添加新的瓷片圖層,這個操作會添加一個新的圖層,然后打開瓷片圖層屬性窗口:

在瓷片圖層屬性中你可以開關圖層的繼承屬性,如果你不希望圖層網格和場景的(0,0)位置完全對齊,你可以修改當前使用的瓷片集的x、y偏移量。你還可以設置圖層的深度(該屬性有獨立的繼承開關),你也可以鎖定這個深度,以避免誤操作修改掉。
當圖層屬性打開時,同時在編輯器窗口右側還會打開一個“瓷片編輯(Tile Editing)”窗口,這個窗口會顯示你目前實用的瓷片集(如果你不小心關掉了這個窗口,可以在頂部菜單中再次打開,后文會進行介紹)。你可以在瓷片編輯窗口中單擊選擇任意圖塊以將其設為畫筆,然后再場景編輯器的圖層中進行繪制,如果你需要同時繪制多塊瓷片,你可以用鼠標多選進行分組,然后選中以設置為畫筆進行繪制。如果你要繪制的瓷片沒有連在一起,那你可以按住Ctrl鍵然后多選幾個瓷片來創建一個自定義筆刷(你也可以用Alt加鼠標左鍵來移除自定義筆刷)。
要注意,在筆刷窗口中你可以用鼠標滾輪或頂部的按鈕來放大或縮小瓷片,也可以使用鼠標中鍵或按住空格鍵來平移瓷片。另外在上方還有個網格選項,可以打開或關閉網格視圖,也可以設置網格的顏色。在瓷片編輯窗口中你還可以從“庫(Libraries)”標簽中選擇畫筆(Brushes)、動畫(Animated)和“自動瓷片(Auto Tiles)”等功能,這些功能以后會單獨介紹。
當你選中瓷片圖層時,你還會在場景編輯器的頂部看到以下工具選項:
| 圖標 | 說明 |
| --- | --- |
|  | 這是鉛筆工具,可以以你選中的瓷片為畫筆直接在場景中進行繪制,右鍵則是擦除功能。要注意在場景編輯器下方狀態欄中會顯示出瓷片的索引值,如果你多選了幾個瓷片,則會顯示所有瓷片的索引值列表。 |
|  | 當你選中橡皮擦工具時,鼠標左鍵即可擦除你在場景編輯器中選中的瓷片。其實,這個操作是把瓷片索引值設為0,就是保留默認的“空”圖塊。 |
|  | 使用填充工具時,會用你當前選中的瓷片填滿整個圖層或你選中的區域。你可以使用單個瓷片為畫筆或多選幾個瓷片自定義的畫筆來填充(甚至可以使用動畫庫中的內容)。如果你沒有先用選擇工具來選擇一個區域,則會自動填滿所有連續的空白圖片或具有相同索引值的連續瓷片區域,如果你在圖層中選取了一個區域,則會填滿這個區域。 |
|  | 使用線條工具時,你可以選擇一個起始位置和一個終點位置,然后會用你選中的瓷片在兩點之間繪制一條直線,如果你在圖層中用選擇工具選擇了一個區域,則只會在該區域內繪制,你可以用單個瓷片或自定義的復合畫筆來進行繪制。 |
|  | 使用矩形工具時,你可以用鼠標左鍵拖放一個區域,左上角起始位置,右下角是釋放鼠標的結束為止,該區域會自動填滿你選中的瓷片畫筆,可以是單個瓷片或自定義的復合畫筆。如果你在圖層中選擇了一個區域,則只在選中區域內繪制。 |
|  | 選擇工具可以在圖層中選中一個區域,讓后續操作只能在該區域中生效(鉛筆、翻轉、鏡像等),點擊該按鈕后直接用鼠標拖放即可創建選區。 |
|  | 自動瓷片工具可以開啟自動平鋪模式,當你設置好自動拼貼的選項后,只要從自動調整庫中選擇任意圖片然后在場景中隨意繪制,都會自動鋪滿對應區域,瓷片的匹配關系會自動進行。要注意,如果你選擇了不屬于自動繪圖庫中的瓷片集,并從中選擇瓷片將會自動把繪制工具切換為普通的鉛筆工具。 |
|  | 這個繼承工具可以給指定圖層內的特定瓷片啟用/禁用繼承關系,只有子場景才可使用這個功能,并且圖層必須開啟繼承屬性。在該狀態下,場景編輯器會默認繼承所有的瓷片內容,然后單擊鼠標右鍵可以關閉某個瓷片的繼承關系,單擊鼠標左鍵打開繼承關系。由此,你可以重新利用“基礎”場景中的元素,并有選擇性的進行繼承。 |
|  | 單擊翻轉工具(或快捷鍵X)時,你所選中的瓷片會垂直翻轉后進行繪制(如果你有自定義畫筆,則整個畫筆都垂直翻轉),如果你沒有選中畫筆瓷片,而是選中了圖層上已經繪制的瓷片,則該瓷片直接翻轉。 |
|  | 單擊鏡像工具(或快捷鍵Y)時,你所選中的瓷片會水平翻轉后進行繪制(如果你有自定義畫筆,則整個畫筆都水平翻轉),如果你沒有選中畫筆瓷片,而是選中了圖層上已經繪制的瓷片,則該瓷片直接翻轉。 |
|  | 用鼠標左鍵單擊該旋轉工具(或快捷鍵“Z”)時會90度順時針旋轉當前選擇的圖像,而不需要修改任何繪制工具(如果你定義了自定義畫筆,則整個畫筆相關瓷片都會旋轉)。如果你沒有選中畫筆瓷片,而是選中了圖層上已經繪制好的瓷片,則該瓷片會直接旋轉。 |
當你在場景中繪制瓷片圖層時,鼠標左鍵為繪制,右鍵為刪除,并且瓷片總是會根據瓷片集屬性中的網格設置自動貼合——如果你不需要這個功能,那你最好考慮使用素材圖層。
要注意當你使用選擇工具在場景編輯器的畫布中選擇了一個區域并且進行了復制或剪切的操作,那這部分圖像就會臨時成為你的繪制畫筆。
更多信息請查閱瓷片集編輯器一節。
#### 路徑圖層(Path Layer)
你可以單擊背景圖層按鈕來添加新的路徑圖層,這個操作會添加一個新的圖層,然后打開路徑圖層屬性窗口:

當你創建了一個路徑圖層以后,你可以從資源樹中選擇用于這個層的路徑(path),然后修改連線的類型(平滑與否),是否閉合以及路徑的精度。要注意,你也可以開關繼承關系,并將路徑設置為特定的顏色(默認為紅色),以便在編輯器中更容易看到路徑。如果你沒有事先定義路徑資源,也可以點擊“新建”按鈕來創建一個。路徑圖層也是具有深度屬性的(默認鎖定不可修改),盡管在實際游戲中路徑圖層本身并不會被渲染顯示出來。
另外你要注意,你可以在編輯器中直接單擊左鍵來增加節點,或用右鍵刪除某個點,或直接在某個點上按住鼠標左鍵拖拽以修改位置,在場景編輯器中路徑的操作是非常方便的。如果你按住ctrl然后用鼠標點擊不同的路徑,就可以復選幾個路徑,你可以同時移動被選中的路徑,或通過菜單批量刪除。
當你選中某個路徑時在編輯器窗口單擊右鍵你會看到以下選項:

你可以在此選擇水平或垂直翻轉,也可以調轉路徑方向(這個效果非常不易察覺,意思是將路徑起點設為終點,原來的終點則變成起點)。你也可以在菜單中直接刪除所選的節點。要注意你可以按住“T”,“S”或“R”,然后點擊并拖拽來進行變形、縮放和旋轉路徑的操作。
### 素材圖層(Asset Layer)
你可以單擊背景圖層按鈕來添加新的素材圖層,這個操作會添加一個新的圖層,然后打開素材圖層屬性窗口:

素材圖層就是用來直接往場景中放置精靈圖像的,你可以在資源樹中直接拖拽精靈到編輯器中,或在資源樹中選中你要的精靈,然后按住Alt鍵然后用鼠標左鍵直接在編輯器中“繪制”即可。精靈圖像很類似瓷片,但是精靈是可以表現動畫效果的——當精靈包含多個圖像資源時,這些圖像會依次展現——另外精靈也沒有瓷片的相關限制,比如不會像瓷片一樣強制貼合網格,長度和速度也可以任意控制。把精靈資源放到素材圖層上時,他們也會根據場景的網格來進行自動對齊,如果不需要這個功能,關閉場景的網格視圖即可。
把素材放到場景中后,你可以雙擊資源來打開屬性窗口進行修改:

在這里,你可以設定唯一ID,是否需要從父場景繼承,甚至修改對應的精靈資源。你也可以修改精靈的一些顯示屬性,比如顏色,或是將其翻轉或旋轉某個角度。你也可以對其進行縮放操作,或是修改在場景中的坐標。如果精靈有子圖像,你還可以設置動畫的播放速度以及初始幀畫面,不過默認狀態是會鎖定精靈編輯器中設置的動畫速度的。
要注意,在導出游戲時所有的精靈資源都會被自動標記為需要導出。特別是在使用繼承功能時,也許你不希望某個特定的精靈出現在某個特定游戲中時,那你可以在列表左側的“導出”選項中把它標記出來避免被導出。但是要注意,如果你在代碼中引用了這個資源,那游戲就無法正常運行了,因此需要謹慎使用這個功能。
### 菜單(Context Menu)
在編輯器頂部菜單中,你會看到如下的一個場景菜單選項:

這些菜單的具體功能如下:
#### 圖層視圖(Layer View)
這個選項會打開圖層編輯器窗口(如果你之前關閉了該窗口的話)。
#### 場景屬性(Room Properties)
這個選項會打開場景屬性窗口(如果你之前關閉了該窗口的話)。
#### 圖層屬性(Layer Properties)
這個選項會打開圖層屬性窗口(如果你之前關閉了該窗口的話)。
#### 實例創建順序(Instance Creation Order)
這個選項會打開一個修改實例創建順序的窗口(這個窗口也可以在場景設置中打開)

這個窗口列出了場景中所有的實例以及其創建順序(從上往下),如果你對某些實例的創建順序有特殊要求,可以在此進行排序操作,你只要用鼠標左鍵按住進行拖放即可調整。
#### 重置當前窗口(Reset Windows On Current Desktop)
這個選項會直接將場景編輯器中的窗口布局重置為默認設置。
#### 瓷片編輯(TIle Editing)
當你選中瓷片圖層時這個菜單才會亮起可選,選中以后會看到如下子菜單:

編輯瓷片圖層時,你可以按住鼠標左鍵然后拖放以進行多選操作,也可以按住Ctrl鍵再用鼠標選中并分組不同瓷片,或按住Alt和左鍵來刪除單個瓷片。在菜單中你可以清除所有選中的瓷片,也可以反選瓷片,還可以復制、剪切選中的瓷片,然后貼去另外的位置(或圖層),也可以直接刪除選中瓷片。最后一個選項則是打開瓷片編輯器窗口(如果你把這個窗口關閉了)。
#### 圖片轉換為瓷片地圖(Convert Image To Tilemap)
Convert Image To Tilemap選項是個十分強大的工具,可以用來導入單張圖片,然后從圖片中提取需要使用的區域,并將其作為Tilemap來給場景編輯器添加新的圖層,創建必需的精靈和瓷片元素。當你選擇這個選項時,系統會要求你提供未壓縮的圖片文件(PNG,GIF或BMP格式),然后加載到游戲中,在加載時你會看到圖像導入工具:

在這里有創建瓷片組分割圖片的選項設置,你可以設置單元格的寬度和高度,以及圖片邊緣的偏移量設置。你還可以設置最終創建的精靈的大致寬度(像素單位)。比如說,如果瓷片組是由64x64的單元瓷片構成的,并且你的總寬度設置為200像素,你最后生成的精靈寬度應該在192像素(大約3個瓷片的大小)。如果你不修改這個值則默認為0,GameMaker Studio 2會盡量將精靈生成為長寬單元格數量相同的“方形”。設置好圖像的分割屬性后,單擊“去色”選項邊的取色器可以選擇你要從最終精靈中剔除掉的顏色,一般會用來刪除背景色,或將導入樣本中非100%不透明度的內容全部剔除。
最后,你還可以選擇用這個工具直接創建精靈、瓷片組甚至瓷片地圖圖層。當你完成導入后,會自動創建一個精靈,所有的圖像都會按網格分布在這個精靈中,就像以這個精靈創建了一個瓷片組一樣。在場景中,會創建出一個新的瓷片地圖圖層,并且會根據生成的瓷片組來重構畫面。請注意,使用這個工具并不會直接復刻瓷片,而是會識別單元格與另一個單元格的圖像數據是否一致(包括旋轉過的瓷片)。你可以在下面的實例圖中看到這一點,里面只創建了一個花瓷片,還有一個盒子,但是卻有兩個實例,其中有一些實例是在原圖像基礎上旋轉得來的。

- 介紹
- 新手須知
- 版本授權
- 安裝
- 更新
- 發布日志
- 所需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
- 翻譯名詞對照表