這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。有了這些概念,各位會更容易理解,要如何設計程式碼。
本篇教學所使用的系統是Windows 10,如果有按鍵相關的說明,會用Windows的系統來解釋。如果你用的是Mac系統,再麻煩自行換成相對應的按鍵。
在學習本篇內容之前,最好具備以下的前置知識,以免看不懂這篇教學的內容。
當GameMaker在遊戲中,生成物體時,會利用物件(Object)裡面的設定,「複製」出一個相對應的實體(Instance),接著展示在畫面中。
換句話說,我們所看到的物體,全部皆為實體,而不是物件,物件只是這些實體的「範本」而已。
也因為物件只是範本,因此實際上,我們可以利用同一個物件,生成很多個「相同功能」的實體,例如:牆壁、地板、敵人。
另外,每個實體也都會有自己的參數,包括「自訂參數」和「內建參數」。即便是相同物件的實體,他們之間也能有不一樣的數值設定。
例如:用同個物件,所產生出來的敵人,他們能有不一樣的XY座標,也能擁有不一樣的HP(生命值)。
為了辨別這些實體,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 ;
}
}
改良之後,方塊們就能各自點擊,而不是一起變化了:
🔔如果內容對你有幫助,可以按個喜歡,這樣就能讓更多人,接觸到這些棒棒的內容🔔
✨祝各位也能開心的做出好遊戲✨