GameMaker|Instance 實體|程式基礎

GameMaker|Instance 實體|程式基礎

更新於 發佈於 閱讀時間約 5 分鐘

這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。有了這些概念,各位會更容易理解,要如何設計程式碼。

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

raw-image


前置知識


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


Instance的簡介


當GameMaker在遊戲中,生成物體時,會利用物件(Object)裡面的設定,「複製」出一個相對應的實體(Instance),接著展示在畫面中。

換句話說,我們所看到的物體,全部皆為實體,而不是物件,物件只是這些實體的「範本」而已。

也因為物件只是範本,因此實際上,我們可以利用同一個物件,生成很多個「相同功能」的實體,例如:牆壁、地板、敵人。


另外,每個實體也都會有自己的參數,包括「自訂參數」和「內建參數」。即便是相同物件的實體,他們之間也能有不一樣的數值設定。

例如:用同個物件,所產生出來的敵人,他們能有不一樣的XY座標,也能擁有不一樣的HP(生命值)。


ID


為了辨別這些實體,GameMaker會給所有實體,一個專屬的ID,只要利用這個ID,我們就能準確的,去控制我們想要操控的實體。

這組ID是GameMaker自動生成的,一般我們不會記錄這串文字,如果要使用的話,通常會把它存到「變數」裡面,再拿這個變數,來進行邏輯運算。

//這樣就能把id,存放到​inst_id裡面
inst_id = id ;

當然,也不是所有情況,都需要把這個ID,存放到變數裡面,例如:想要改變實體的座標,可以這樣子做:

//將實體的座標設定成(10,10)​
id.x = 10 ;
id.y = 10 ;


物件改變會影響實體


在幼幼班的內容裡,我們是透過「改變物件的座標」,來讓方塊產生移動的,但這個方法,只適用於「一個」方塊的情況下。

因為只要改變物件的參數,那麼,「所有」相同物件的「實體」,就會一起改變參數。

狀況就像下面的這張GIF:

所有實體會一起改變座標

所有實體會一起改變座標


上面這個範例,所使用的程式碼,是長這個樣子:

//如果滑鼠的左鍵點下
if mouse_check_button_pressed(mb_left)
{
//如果滑鼠的座標,有和obj_block碰撞(有點擊到方塊的意思)
if position_meeting( mouse_x , mouse_y , obj_block )
{
//隨機改變obj_block的XY座標
randomise() ;
block_x = irandom_range( 0 , room_width - sprite_get_width(0)) ;
block_y = irandom_range( 0 , room_height - sprite_get_height(0)) ;
obj_block.x = block_x ;
obj_block.y = block_y ;
}
}


如果,我們希望兩個實體,能夠個別偵測,各自執行改變座標的功能,那要做的事情也很簡單,我們只要把obj_block的參數,全部換成id即可。

當我們點擊紅色方塊的實體時,這個id會自動帶入,紅色方塊實體的ID,藍色方塊也是如此。

改變後的程式碼如下:

//如果滑鼠的左鍵點下
if mouse_check_button_pressed(mb_left)
{
//如果滑鼠的座標,有和實體碰撞(有點擊到方塊的意思)
if position_meeting( mouse_x , mouse_y , id )
{
//隨機改變實體的XY座標
randomise() ;
block_x = irandom_range( 0 , room_width - sprite_get_width(0) ) ;
block_y = irandom_range( 0 , room_height - sprite_get_height(0) ) ;
id.x = block_x ;
id.y = block_y ;
}
}


改良之後,方塊們就能各自點擊,而不是一起變化了:

正常的點方塊遊戲

正常的點方塊遊戲




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


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

avatar-img
開心做遊戲 Happy Making Game
10會員
68內容數
免費、開心、簡單,這是我做教學的理念,我希望透過我的行動,讓人們找回自我學習的快樂,讓那些資源稀少的自學者們,也能朝著自己的夢想來前進。讓我們一起開心的做出遊戲吧!
留言
avatar-img
留言分享你的想法!
這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
這篇內容,將透過實戰教學,來講解「滑鼠點方塊」的程式碼。包括如何測試遊戲、座標系統、自訂參數和內建參數、if else、and、遊戲的邏輯設計、程式碼解析。
這篇內容,將透過實戰教學,介紹GameMaker中的Event。包括Event的簡介、Create的講解、Step的講解、Events的基本操作。
這篇內容,將透過實戰教學,介紹GameMaker中的Camera。包括Camera的簡介、設定Camera的方法、Viewport的介紹。
這篇內容,將透過實戰教學,介紹GameMaker中的Room。包括Room的簡介、調整寬高、圖層功能的概述、用Object來建立實體。
這篇內容,將透過實戰教學,介紹GameMaker中的Object。包括如何建立新的Object、Object和Sprite的關係、設定Sprite參數。
這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
這篇內容,將透過實戰教學,來講解「滑鼠點方塊」的程式碼。包括如何測試遊戲、座標系統、自訂參數和內建參數、if else、and、遊戲的邏輯設計、程式碼解析。
這篇內容,將透過實戰教學,介紹GameMaker中的Event。包括Event的簡介、Create的講解、Step的講解、Events的基本操作。
這篇內容,將透過實戰教學,介紹GameMaker中的Camera。包括Camera的簡介、設定Camera的方法、Viewport的介紹。
這篇內容,將透過實戰教學,介紹GameMaker中的Room。包括Room的簡介、調整寬高、圖層功能的概述、用Object來建立實體。
這篇內容,將透過實戰教學,介紹GameMaker中的Object。包括如何建立新的Object、Object和Sprite的關係、設定Sprite參數。