這篇內容,將會講解什麼是變數範圍,以及與變數範圍相關的知識。有了這些概念,各位會更容易理解,要如何設計程式碼。
本篇教學所使用的系統是Windows 10,如果有按鍵相關的說明,會用Windows的系統來解釋。如果你用的是Mac系統,再麻煩自行換成相對應的按鍵。
在學習本篇內容之前,最好具備以下的前置知識,以免看不懂這篇教學的內容。
在變數的說明中,我們知道了變數有自己的作用區域,也理解了,不同區域的變數,能有相同的名稱。
因此,在GameMaker當中,變數能依照作用區域的不同,細分成不同作用域的變數。
接下來,我們將解釋,不同作用域的變數,他們各自的特性,以及適合他們的應用場景。
只能在實體範圍內使用的,稱之為實體變數,而這些變數,會在物件(Object)上面使用。你可能會有疑問,為何在物件上使用,卻被稱為實體變數呢?
在講解實體的教學中,我們已經知道,畫面中的所有物體,都是實體。而物件裡的所有設定,都只是用來複製的範本。
因此,在物件裡面的變數,最終都是給實體們做使用,所以才會稱呼為實體變數。
上面我們說到,實體變數的使用範圍,是在物件裡面,這包括了物件裡面的所有事件(Event)。
舉例來說,我們在Create的事件裡,建立了實體變數,那麼在Step的事件裡,就能使用這個變數,來進行邏輯運算,或是重新的賦值。
在不同的物件上面,能有相同名稱的實體變數,但他們會是相互獨立的,並且能各自擁有自己的數值。上述這點,已經有在變數的教學中舉例過,這裡就不再重複舉例。
另外,用同一個物件,所產生的不同實體,他們之間的實體變數,也是相互獨立的。關於這點的解釋,已經有在實體的教學中說明過,如果忘記了,可以回去參考。
只要定義之後,整個遊戲專案,都能夠讀取和使用的變數。全域變數能在任何可以寫程式的地方,來進行賦值設定。
全域變數並不會像實體變數那樣,有名稱重複的狀況。只要有任何一個物件(或程式碼),對全域變數進行賦值,那其他地方讀取到的數值,就會跟著一起改變。
這邊舉個簡單的例子:
假設我們想設計一款,多人派對遊戲,所有的玩家,將會共用一條HP(生命值)。只要有玩家受到傷害,HP就會減少,此時我們就能把HP,設定成全域變數。
//將hp設定成全域變數
global.hp = 100 ;
在設計全域變數的時候,常常會搭配Script Function的功能來使用,我們能利用這個功能,來幫我們的全域變數,進行初始化的設定。
關於Script Function的用途,可以參考這篇教學:
GameMaker|Script Function 腳本函式|程式基礎
上面我們所提到的實體變數和全域變數,他們有個特點,就是建立完之後,這個變數就會存放到記憶體裡面,等到要使用時,再從記憶體中取出。
而局部變數的特色,在於執行完特定的事件或函式之後,就會從記憶體中被刪除。也因為這種特色,局部變數通常被用在「用完一次就可以扔掉」的參數上。
局部變數的應用場景,通常都比較複雜,這邊我給不出什麼簡單的範例,因此,我只能告訴各位,要如何設定局部變數。
未來如果在實戰範例中,有使用到局部變數,會再跟各位解釋,為什麼要在那個範例中,使用局部變數。
那麼,以下是局部變數的設定方法:
//將hp設定成局部變數
var hp = 100 ;
【更新】關於局部變數的用法,可以參考Script Function的教學,裡面有講解到局部變數的應用:
GameMaker|Script Function 腳本函式|程式基礎
常數是一種特殊的變數,會在遊戲一開始的時候設定一次,接著就永遠不能再改變他。
常數通常會用來存放,一些特殊的數值,以便我們能在遊戲中進行讀取(只能讀取,不能進行賦值的動作)。
在GameMaker當中,我們不能使用自訂的常數,但我們可以用Macro或Enum,來達成常數的效果。
關於常數的說明,我暫時只能提供到這裡,因為我還不熟悉,Macro和Enum的功能,也還不清楚要如何去應用他們。
未來如果我有使用到,也覺得他們很有用,那麼,我會再找個時間,補上相關的應用說明。
在變數的教學中,我們已經有提到了內建變數,這邊只是要補充說明,內建變數也是有分不同的作用區域。
例如:x、y、speed,是屬於實體變數;fps、game_project_name,是屬於全域變數。
🔔如果內容對你有幫助,可以按個喜歡,這樣就能讓更多人,接觸到這些棒棒的內容🔔
✨祝各位也能開心的做出好遊戲✨