GameMaker|Variable Scope 變數範圍|程式基礎

閱讀時間約 4 分鐘

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

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

raw-image


前置知識


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


Variable Scope的簡介


在變數的說明中,我們知道了變數有自己的作用區域,也理解了,不同區域的變數,能有相同的名稱。

因此,在GameMaker當中,變數能依照作用區域的不同,細分成不同作用域的變數。

接下來,我們將解釋,不同作用域的變數,他們各自的特性,以及適合他們的應用場景。


Instance Variable 實體變數


只能在實體範圍內使用的,稱之為實體變數,而這些變數,會在物件(Object)上面使用。你可能會有疑問,為何在物件上使用,卻被稱為實體變數呢?

在講解實體的教學中,我們已經知道,畫面中的所有物體,都是實體。而物件裡的所有設定,都只是用來複製的範本。

因此,在物件裡面的變數,最終都是給實體們做使用,所以才會稱呼為實體變數。


上面我們說到,實體變數的使用範圍,是在物件裡面,這包括了物件裡面的所有事件(Event)。

舉例來說,我們在Create的事件裡,建立了實體變數,那麼在Step的事件裡,就能使用這個變數,來進行邏輯運算,或是重新的賦值。


在不同的物件上面,能有相同名稱的實體變數,但他們會是相互獨立的,並且能各自擁有自己的數值。上述這點,已經有在變數的教學中舉例過,這裡就不再重複舉例。

另外,用同一個物件,所產生的不同實體,他們之間的實體變數,也是相互獨立的。關於這點的解釋,已經有在實體的教學中說明過,如果忘記了,可以回去參考。


Global Variable 全域變數


只要定義之後,整個遊戲專案,都能夠讀取和使用的變數。全域變數能在任何可以寫程式的地方,來進行賦值設定。

全域變數並不會像實體變數那樣,有名稱重複的狀況。只要有任何一個物件(或程式碼),對全域變數進行賦值,那其他地方讀取到的數值,就會跟著一起改變。


這邊舉個簡單的例子:

假設我們想設計一款,多人派對遊戲,所有的玩家,將會共用一條HP(生命值)。只要有玩家受到傷害,HP就會減少,此時我們就能把HP,設定成全域變數。

//將hp設定成全域變數
global.hp = 100 ;
全域變數的設定方法

全域變數的設定方法


在設計全域變數的時候,常常會搭配Script Function的功能來使用,我們能利用這個功能,來幫我們的全域變數,進行初始化的設定。

關於Script Function的用途,可以參考這篇教學:

GameMaker|Script Function 腳本函式|程式基礎


Local Variable 局部變數


上面我們所提到的實體變數和全域變數,他們有個特點,就是建立完之後,這個變數就會存放到記憶體裡面,等到要使用時,再從記憶體中取出。

而局部變數的特色,在於執行完特定的事件或函式之後,就會從記憶體中被刪除。也因為這種特色,局部變數通常被用在「用完一次就可以扔掉」的參數上。


局部變數的應用場景,通常都比較複雜,這邊我給不出什麼簡單的範例,因此,我只能告訴各位,要如何設定局部變數。

未來如果在實戰範例中,有使用到局部變數,會再跟各位解釋,為什麼要在那個範例中,使用局部變數。

那麼,以下是局部變數的設定方法:

//將hp設定成局部變數
var hp = 100 ;
局部變數的設定方法

局部變數的設定方法


【更新】關於局部變數的用法,可以參考Script Function的教學,裡面有講解到局部變數的應用:

GameMaker|Script Function 腳本函式|程式基礎


Constant 常數


常數是一種特殊的變數,會在遊戲一開始的時候設定一次,接著就永遠不能再改變他。

常數通常會用來存放,一些特殊的數值,以便我們能在遊戲中進行讀取(只能讀取,不能進行賦值的動作)。

在GameMaker當中,我們不能使用自訂的常數,但我們可以用Macro或Enum,來達成常數的效果。


關於常數的說明,我暫時只能提供到這裡,因為我還不熟悉,Macro和Enum的功能,也還不清楚要如何去應用他們。

未來如果我有使用到,也覺得他們很有用,那麼,我會再找個時間,補上相關的應用說明。


Built-in Variable 內建變數


在變數的教學中,我們已經有提到了內建變數,這邊只是要補充說明,內建變數也是有分不同的作用區域。

例如:x、y、speed,是屬於實體變數;fps、game_project_name,是屬於全域變數。




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


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

免費、開心、簡單,這是我做教學的理念,我希望透過我的行動,讓人們找回自我學習的快樂,讓那些資源稀少的自學者們,也能朝著自己的夢想來前進。讓我們一起開心的做出遊戲吧!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
這篇內容,將會講解什麼是資料型態,以及與資料型態相關的知識。包括資料型態的簡介、實數、布林值、 字串、陣列。
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
這篇內容,將透過實戰教學,來講解「滑鼠點方塊」的程式碼。包括如何測試遊戲、座標系統、自訂參數和內建參數、if else、and、遊戲的邏輯設計、程式碼解析。
這篇內容,將透過實戰教學,介紹GameMaker中的Event。包括Event的簡介、Create的講解、Step的講解、Events的基本操作。
這篇內容,將透過實戰教學,介紹GameMaker中的Camera。包括Camera的簡介、設定Camera的方法、Viewport的介紹。
這篇內容,將會講解什麼是資料型態,以及與資料型態相關的知識。包括資料型態的簡介、實數、布林值、 字串、陣列。
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
這篇內容,將透過實戰教學,來講解「滑鼠點方塊」的程式碼。包括如何測試遊戲、座標系統、自訂參數和內建參數、if else、and、遊戲的邏輯設計、程式碼解析。
這篇內容,將透過實戰教學,介紹GameMaker中的Event。包括Event的簡介、Create的講解、Step的講解、Events的基本操作。
這篇內容,將透過實戰教學,介紹GameMaker中的Camera。包括Camera的簡介、設定Camera的方法、Viewport的介紹。
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
★★★先到自己電子郵件信箱下載教材上的圖片對照閱讀操作。 變數是保留在記憶體位置的儲存值,這意味著當我們創建一個變數,需要在記憶體中保留一些空間。 常數 程式中的變數其內容固定不會改變,通常以大寫英文字母命名,例如圓周率 PI = 3.14159。 基於變數的資料類型,解釋器會分配對應
C#編程基礎筆記 1. 變量(Variables) - 變量是編程的最基本單位 - 技術上是計算機內存中存儲值的一小部分 - 實際上是一個容器,可以存儲不同類型的信息 - 變量必須有唯一的名稱 - 充當值的佔位符 示例: ```csharp public int Current
就是指變數可以被訪問和使用的範圍,來說一下var、let和const的作用域差異。 var :function example() { console.log(x); // 輸出: undefined 因為變量提升造成的 var x = 5; } 函數作用域或全域作用域 可以重複宣告
前言: 雖然前面有些定義還沒有完整的解釋,但還是後面再說吧, 誰想一直看理論啊(摔本子)
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
※ 認識變數: 變數(variable)是在程式裡面把東西存起來的概念。 基於不讓電腦每次都需要重新運算,把需要花時間運算的東西先存起來,之後再直接拿出來使用,所以我們需要變數。 變數儲存的位置在電腦裡的記憶體。變數就像是一個箱子,記憶體就像是一個倉庫。箱子的名稱就是變數名稱,箱子的內容物就是
函數式編程跟物件導向一個很大的差異在於對資料可變性(mutability)的態度,函數式編程不鼓勵修改原有的資料,有些語言甚至沒有修改的概念;而物件導向專注於狀態的改變,物件作為閉包就已經假設資料是可變的。這種對於可變性的態度注定物件導向比較容易得到關注,因為這個模型比較符合電腦底層的運作邏輯,而我
Thumbnail
宣告變數 變數是程式中用來儲存和表示數據的標識符號​,並將變數存放在某個記憶體位子 可以用ID的方法查找變數存在哪個記憶體,此方法有利於以後查找問題用。 在大多數程式語言中,變數需要事先聲明(宣告)並賦值。 而Python是一種動態類型語言,不需要顯式宣告變數類型,而是在賦值時自動進行推斷。
Thumbnail
在Python中,有三種變數作用域:全域、區域和封閉。 區域作用域(Local Scope): 在函式內部定義的變數具有區域作用域,它們只能在該函式內部訪問。 例如: def my_function(): local_variable = 10
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
★★★先到自己電子郵件信箱下載教材上的圖片對照閱讀操作。 變數是保留在記憶體位置的儲存值,這意味著當我們創建一個變數,需要在記憶體中保留一些空間。 常數 程式中的變數其內容固定不會改變,通常以大寫英文字母命名,例如圓周率 PI = 3.14159。 基於變數的資料類型,解釋器會分配對應
C#編程基礎筆記 1. 變量(Variables) - 變量是編程的最基本單位 - 技術上是計算機內存中存儲值的一小部分 - 實際上是一個容器,可以存儲不同類型的信息 - 變量必須有唯一的名稱 - 充當值的佔位符 示例: ```csharp public int Current
就是指變數可以被訪問和使用的範圍,來說一下var、let和const的作用域差異。 var :function example() { console.log(x); // 輸出: undefined 因為變量提升造成的 var x = 5; } 函數作用域或全域作用域 可以重複宣告
前言: 雖然前面有些定義還沒有完整的解釋,但還是後面再說吧, 誰想一直看理論啊(摔本子)
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
※ 認識變數: 變數(variable)是在程式裡面把東西存起來的概念。 基於不讓電腦每次都需要重新運算,把需要花時間運算的東西先存起來,之後再直接拿出來使用,所以我們需要變數。 變數儲存的位置在電腦裡的記憶體。變數就像是一個箱子,記憶體就像是一個倉庫。箱子的名稱就是變數名稱,箱子的內容物就是
函數式編程跟物件導向一個很大的差異在於對資料可變性(mutability)的態度,函數式編程不鼓勵修改原有的資料,有些語言甚至沒有修改的概念;而物件導向專注於狀態的改變,物件作為閉包就已經假設資料是可變的。這種對於可變性的態度注定物件導向比較容易得到關注,因為這個模型比較符合電腦底層的運作邏輯,而我
Thumbnail
宣告變數 變數是程式中用來儲存和表示數據的標識符號​,並將變數存放在某個記憶體位子 可以用ID的方法查找變數存在哪個記憶體,此方法有利於以後查找問題用。 在大多數程式語言中,變數需要事先聲明(宣告)並賦值。 而Python是一種動態類型語言,不需要顯式宣告變數類型,而是在賦值時自動進行推斷。
Thumbnail
在Python中,有三種變數作用域:全域、區域和封閉。 區域作用域(Local Scope): 在函式內部定義的變數具有區域作用域,它們只能在該函式內部訪問。 例如: def my_function(): local_variable = 10