2024-08-04|閱讀時間 ‧ 約 8 分鐘

GameMaker|Method 方法|程式基礎

這篇內容,將會講解什麼是方法,以及與方法相關的知識。有了這些概念,各位會更容易理解,要如何設計程式碼。

本篇教學所使用的系統是Windows 10,如果有按鍵相關的說明,會用Windows的系統來解釋。如果你用的是Mac系統,再麻煩自行換成相對應的按鍵。


前置知識


在學習本篇內容之前,最好具備以下的前置知識,以免看不懂這篇教學的內容。


定義Method


在物件(Object)當中,有兩種定義函式的方法,一個跟腳本函式(Script Function)一樣,另一個則是使用方法變數(Method Variable)。

以下是範例的程式碼:

//用此方法製作的,稱呼為Method,變數會呈現橘色
function method_random() {
//隨機改變座標的位置,但不會超出畫面
randomise() ;
id.x = irandom_range( 0 , room_width - sprite_get_width(0) ) ;
id.y = irandom_range( 0 , room_height - sprite_get_height(0) ) ;
}

//用此方法製作的,稱呼為Method Variable,變數會呈現紫色
method_variable_random = function() {
//隨機改變座標的位置,但不會超出畫面
randomise() ;
id.x = irandom_range( 0 , room_width - sprite_get_width(0) ) ;
id.y = irandom_range( 0 , room_height - sprite_get_height(0) ) ;
}

//兩種Method的使用方法,都是差不多的
method_random() ;
method_variable_random() ;


範例程式碼的截圖,各位可以觀察一下顏色:

定義Method的範例程式碼


Method Variable 方法變數


方法變數除了可以當成Method來用之外,他本身也是一種變數,換句話說,變數能做的事情,方法變數也能做。

一個最簡單的用法,就是把方法變數,定義成全域變數,那麼原本只能用在,特定物件裡的Method,就能拿去給其他的物件使用。

global.method_variable_random = function() {
//隨機改變座標的位置,但不會超出畫面
randomise() ;
id.x = irandom_range( 0 , room_width - sprite_get_width(0) ) ;
id.y = irandom_range( 0 , room_height - sprite_get_height(0) ) ;
}


跨區使用Method


一般來說,如果在物件上定義Method,通常就是給指定的物件使用,那麼物件之間,能不能跨區使用Method呢(物件A使用物件B的方法)?答案是可以的。

通常我們能用以下的方法,來實踐跨區使用的動作:

跨區使用Method的範例


不過Method有個特性,就是Method裡的任何參數,都是「綁」在定義的物件上。

以上面的範例來說,即便我們讓obj_circle來呼叫obj_block的Method,最終改變座標的,依然會是obj_block的實體,obj_circle並不會產生反應。

那有沒有方法,是能把參數,更換到呼叫Method的物件上呢?答案有是有的。

//將obj_block裡的Method,轉換到obj_circle的實體上,以下兩種程式碼都能使用
//注意參數裡的函式,或是方法變數,都不能加上括號
circle_random = method( id , obj_block.method_random ) ;
circle_random = method( id , obj_block.method_variable_random ) ;

//呼叫方法
circle_random() ;


使用函式時要注意括號


也許各位有注意到,我在上一段的程式碼中,有註明不能加上括號,如果加上了,程式就會跳出錯誤,而無法正常的執行。

為了解釋這個現象,各位可以查看以下的程式碼:

function number_plus_ten() {
//此函式,最終會回傳數值100的實數資料
var number = 90 ;
number = number + 10 ;
return number ;
}

//呼叫number_plus_ten,讓get_return的數值變成100
get_return = number_plus_ten() ;

//不呼叫number_plus_ten,讓method_variable變成方法變數
method_variable = number_plus_ten ;


簡單來說,只要有用括號,就表示要「執行」函式,如果我們要把函式(或方法變數),當成參數來使用,那就是不需要加括號的(因為不用執行)。

但如果是要進行賦值,就得看用途來決定了。

備註:這邊之所以說是函式,是因為Script Function和Method,都得注意這點,這並不是Method的專利。




🔔如果內容對你有幫助,可以按個喜歡,這樣就能讓更多人,接觸到這些棒棒的內容🔔


✨祝各位也能開心的做出好遊戲✨

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.