GMS2官方教程系列1/8——角色移動
這是官方教程GML版的第一章,一共有8章,這章主要介紹基本的角色創建和移動
這套教程雖然簡單,但是對於初學者而言是很不錯的入門教材,一步一步的指導新手通過基本的一些操作來完成一個具有一定完成度的遊戲,遊戲是一個90度俯視視角的射擊類遊戲。這套教程是全套一共8章,今天第一章的內容主要是介紹如何創建精靈、對象,以及操作對象進行運動。
精靈和對象創建
首先我們創建一個玩家的精靈(Sprites),如上圖所示,只需要在右側資源樹中選中Sprites菜單然後單擊右鍵選擇Create即可新建一個精靈,然後GMS2會自動打開一個精靈編輯窗口,如下圖:
這個窗口可以按住滑鼠隨意拖放合適的位置,也可以按住Ctrl健然後是用滾輪來進行縮放查看。首先我們要給精靈起一個名字,通常我們會給不同的資源設定一些前綴用於區分,在這裡我們使用「spr」作為精靈的前綴,同時用「_」分割前綴和名稱,要注意起名的時候只能使用字母、數字和下劃線。然後我們要給這個精靈設置用於展示的圖片,點擊「Import」按鈕會打開一個窗口,可以在其中選擇需要指定給這個精靈的圖片
我們也可以導入GIF動畫或多張序列幀圖片來給精靈設置動畫效果,不過在本章暫時不使用這個功能,在後續的教程中會教導大家使用動畫功能。我們還可以設置精靈的原點,這個原點就是之後在場景中生成時所設置點的位置,可以直接在圖片上用滑鼠指定,或通過下圖的下拉選項菜單選擇預設的位置,在這裡我們選擇「Middle Center」,就是在圖片的最中央。
接下來我們需要創建一個玩家對象,同樣在右側資源樹中找到Object的菜單然後右鍵選擇Create
然後會在剛才的精靈編輯窗口下方彈出一個對象編輯窗口:
跟精靈一樣,我們首先命名這個對象,同樣為了便於區分使用「obj」作為前綴,然後我們要把這個玩家對象跟之前創建的玩家精靈關聯起來,點擊「No Spite」處會出現一個窗口,可以從中選擇項目中已經創建的精靈,這裡我們選擇剛剛創建單位「spr_player」的那個精靈
現在我們的玩家對象基本已經有了個雛形,雖然還沒有處理任何的邏輯,但是一個基本的對象已經完成了,我們可以把它放到我們的遊戲中實際看看到底是怎樣的,我們回到右側資源樹中找到room這個選項,然後展開,我們會看到已經有一個默認的「room0」存在了,這是因為GMS2遊戲全部基於遊戲場景,因此默認至少會有一個場景存在,我們雙擊這個「room0」就會進入場景編輯器的界面
場景是整個遊戲的基礎,我們會在場景中設置背景圖片,組織各種對象來生成我們所看到的遊戲,現在我們用滑鼠從右邊把剛剛做好的玩家對象直接拖入場景中,如果按住Alt鍵直接在場景中單擊滑鼠會直接生成當前選中的對象。
放置好我們需要的玩家對象之後,我們可以單擊左上角的Play按鈕來運行一下遊戲試試看效果:
經過短暫的編譯之後遊戲就會自動啟動,這時候我們只能看到一個黑色的背景上有一個孤零零的飛船,而不能進行任何的操作,因為我們沒有寫任何有關的代碼。
動起來
讓我們回到GMS2中,打開玩家對象的編輯窗口,現在要開始添加一些事件和功能性代碼讓我們的飛船動起來。我們可以看到在對象編輯窗口的右側有一個事件窗口,而所謂的事件就是我們用來進行邏輯判斷最基本的元素,而我們在遊戲中所說的邏輯就是:
當某件事情觸發時,執行某個特定的命令
單擊「Add Event」會打開一個事件列表,這些是GMS2默認的事件列表,其中我們這次要使用的是Step這個事件,這個事件比較特殊,它會在遊戲每一幀都自動觸發一次,可以理解成在遊戲過程中在不斷觸發,如果你在遊戲設置中把FPS設置為60幀/秒,那就意味著這個事件會在一秒之內連續觸發60次。當我們選擇Step事件後,會自動在右側打開一個新的較大的窗口,這個窗口就是用來編寫執行的命令的代碼的窗口
在這裡我們寫下一行:
x = x + 4 ;
你會發現這個x是綠色的,這說明這是對象的自帶屬性,這個x就是對象在場景中所處位置的水平位置,我們首先要讓這個對象發生一個水平向右的位移,那就是要讓這個對象的x值越來越大,所以這一行就代表著每個step事件被觸發時,對象的x值都會增加4個像素,而由於step事件會不斷觸發,這個對象也就會不斷向右進行移動了。當寫完這行代碼以後你可以再次運行遊戲來預覽一下這個運動的效果,你會發現遊戲啟動後飛船會一直向右移動,直到飛出畫面,因為我們沒有設置任何停止或控制的命令,這個對象就會永遠向右移動下去。
可操作
但剛才的移動我們依然無法操作,接下來我們要增加一些代碼,以確保我們可以控制這個精靈的移動。我們的目的是寫一段內容,確保當我們在鍵盤上按下向右的方向鍵時,飛船向右進行移動,當我們鬆開按鍵時,飛船就停住不動那麼我們就需要引入」if「這個函數,如下圖所示:
if (keyboard_check(vk_right)) x = x + 4 ;
這一行內容代表
假如 ( 檢測到被按下 ( 右方向鍵 ) ) x = x + 4 ;
再直白的翻譯就是
假如 ( ( 右方向鍵 ) 檢測到被按下時 ) x = x + 4 ;
在這裡我們把需要執行的命令」x=x+4「直接放在了if的條件之後,這在GML語言中是可行的,另外還有一種寫法,是把命令用「{}」包圍起來放到if方法下方:
if (keyboard_check(vk_right)) { x = x + 4 ;}
這時候我們再啟動遊戲測試一下,就會發現已經達成了我們的目標,只有在按下右方向鍵的時候飛船才會向右移動了。接下來我們重複剛才的步驟,把上下左右的方向操作全部完成即可:
這個操作我們可以直接複製剛才的代碼,然後在其中進行一些修改,首先把按鍵的判斷分別指向上下左右四個不同的方向鍵,然後把按下方向鍵以後需要執行的命令進行調整。這裡我們要明確一個概念,遊戲中場景的x,y的原點默認是在左上角的,因此x越大意味著越向右,越小則越向左,y值越大意味著越向畫面下方,越小則越向上,因此數值的加減關係務必定義正確。
if (keyboard_check(vk_right)) x = x + 4 ;if (keyboard_check(vk_left)) x = x - 4 ;if (keyboard_check(vk_up)) y = y - 4 ;if (keyboard_check(vk_down)) y = y + 4 ;
當以上代碼都完成後,再次啟動遊戲進行預覽,我們會發現現在可以通過上下左右四個按鍵來任意控制飛船的移動了。
飛船的角度
最後我們要設置讓飛船能時刻保持正面朝著滑鼠所處的位置,這意味著我們需要隨時調整精靈圖像的角度,在GMS2中我們有一個默認的屬性「image_angle"來控制這個角度,然後還有一個自帶的函數」point_direction"(點對點夾角)可以設置點對點的夾角來實現我們需要的效果:
如上圖所示,image_angle是對象自身圖像的角度,我們把這個角度用「點對點夾角」的函數來進行控制,當我們輸入這個函數以後,在輸入參數時,在代碼編輯器底部我們會看到一個提示「point_direction(x1,y1,x2,y2)」,這代表這個函數需要4個參數,分別是x1、y1、x2、y2,這是兩個點的x、y值,這個函數計算的是兩點所連成的直線與水平線之間的夾角,而我們現在要設置的兩個點就是對象自身的原點和滑鼠所處的位置,因此我們填入以下內容
image_angle = point_direction(x,y,mouse_x,mouse_y)
其中x,y分別是對象自身原點的x,y值,mouse_x和mouse_y則是自帶屬性中滑鼠所處的位置的x,y值,因此這就意味著這個對象的圖片的角度要時刻與這兩點的夾角保持一致,就剛好能滿足我們所要達成的目的——讓飛船的正面時刻朝向滑鼠所在的位置。
這是官方系列教程中的第一章,只是簡單介紹了物體運動的操作方式,後續還會有更多內容。
推薦閱讀:
TAG:GameMakerStudio | 遊戲開發 |