GameMaker|程式碼講解|滑鼠點方塊|幼幼班10

閱讀時間約 11 分鐘

這篇內容,我將會用適合初學者的詞語,來解釋實戰範例中的程式碼。我會將心力,著重於解釋「背後的邏輯原理」,而不是那些深奧的專有名詞。

至於程式語言中的專有名詞,未來如果有機會,會再另外製作相關的教學。如果我在幼幼班講這些,只會讓各位失去學習的樂趣而已。

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

raw-image


前置知識


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


實戰範例:滑鼠點方塊


從幼幼班05開始,我會一邊講解GameMaker的基礎功能,一邊加入實戰的操作,讓各位能完成這個,看起來蠻無聊的「滑鼠點方塊」遊戲。

實戰範例:滑鼠點方塊

實戰範例:滑鼠點方塊


如何測試遊戲


當我們輸入完程式碼,想要測試運行結果時,可以尋找畫面左上角,一個播放形狀的按鈕,點擊之後,就會運行整個專案的結果。快捷鍵的話,是鍵盤上的「F5」。

Run的位置

Run的位置


座標系統


在GameMaker的座標系統中,原點的位置是在「左上角」,而非我們常見的左下角。換句話說,X軸向右為正,Y軸則是向下為正。

如果你要讓遊戲中的角色往上跳,記得,Y軸的座標是「減少」,這樣才會讓角色往畫面「上方」移動。

GameMaker的座標系統

GameMaker的座標系統


自訂參數 & 內建參數


首先,我們看看下面的這段程式碼。

//設定兩個自訂參數,分別表示block的xy座標
block_x = 10 ;
block_y = 10 ;
//實際去改變block的座標位置
obj_block.x = block_x ;
obj_block.y = block_y ;


所謂的自訂參數,就是由我們自己,所「虛構」出來的參數。如果我們只是改變這些數值,遊戲中的畫面是不會變化的。

而內建參數,則是GameMaker這套遊戲引擎,所提供給我們的參數。我們從幼幼班05的教學開始,所碰到的XY座標、寬高數值,這些其實都是在設定內建參數。


我們回到展示的那段程式碼,在這段程式碼當中,我們設定了兩個「自訂參數」,分別是:block_xblock_y,並把他們的數值設定成10。

但是這樣做,並不會實際讓block的座標改變,我們還需要使用「內建參數」,才能真的去改變block的座標。


在GameMaker當中,obj_block.xobj_block.y,他們所代表的參數意義是「物件obj_block的XY座標位置」。

因此,我們只要把block_xblock_y,放到obj_block.xobj_block.y裡面。最終,obj_block的座標位置,就會順利的變成(10, 10)。


邏輯判斷:if else


「如果發生什麼事情,就去做什麼事情」,這在程式設計當中,是個頻繁使用的「邏輯判斷」功能。

例如:當成績大於等於80分時,就顯示出評價A。如果用程式碼表示,大概會像下方的這個範例。

//當成績大於等於80分時,顯示出評價A
If (成績 >= 80)
{
顯示"評價A"
}

備註:上面的程式碼,是為了讓各位看懂,才用這些中文字,實際上這樣是不能運作的。


邏輯判斷:and


如果我們需要「同時」滿足多個條件時,可以使用「and」的功能,來完成這項工作。

例如:當成績介於70到79分之間,就顯示出評價B。

由於我們只能用「大於、小於、等於」,來當作條件限制,因此要做出「數值區間」的限制,就要用「大於等於70 and 小於 80」來當作條件。

//當成績介於70到79分之間,就顯示出評價B
If (成績 >= 70 && 成績 < 80)
{
顯示"評價B"
}

備註:在GameMaker中,and的功能是用&&來表示。


程式碼解析:滑鼠點方塊


這是Create和Step中的程式碼:


這是方便閱讀的文字版:

//這段程式碼,放在Create裡面
//設定兩個自訂參數,分別表示block的xy座標
block_x = 10 ;
block_y = 10 ;
//實際去改變block的座標位置
obj_block.x = block_x ;
obj_block.y = block_y ;

//隨機改變block的位置,但不會超出畫面
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 ;

//這段程式碼,放在Step裡面
if mouse_check_button_pressed( mb_left )
{
if mouse_x >= block_x && mouse_x <= block_x + sprite_get_width(0)
&& mouse_y >= block_y && mouse_y <= block_y + sprite_get_height(0)
{
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 ;
}
}


以下是實戰範例的「邏輯設計」:

  1. 初始化,將方塊的座標,設置為(10, 10)。
  2. 初始化,隨機改變方塊的位置,但不會超出畫面。
  3. 檢查滑鼠的左鍵,是否有被按下。
  4. 如果滑鼠的左鍵被按下,接著檢查滑鼠的座標,是否有在方塊的範圍內。
  5. 如果滑鼠的座標在方塊內,就隨機改變方塊的位置,但不會超出畫面。


🔸邏輯設計01


文字版的第2行~第7行,為第一項的程式設計。這部分的內容,已經在「自訂參數 & 內建參數」介紹過,所以就不再贅述。


🔸邏輯設計02


文字版的第9行~第14行,為第二項的程式設計。這裡要講解的程式碼,如下:

randomise() ;

irandom_range( n1 , n2 ) ;
block_x = irandom_range( 0 , room_width - sprite_get_width(0)) ;
block_y = irandom_range( 0 , room_height - sprite_get_height(0)) ;


randomise()的功能,是改變隨機種子。隨機種子的概念,不適合在幼幼班裡講解,各位只要知道,如果要達成「完全的隨機」,就需要加入這行程式碼。

irandom_range(n1,n2)的功能,是可以讓我們產生一個「隨機的整數」,而這個隨機的範圍,則是由括號裡面的n1和n2來決定。

在實戰範例裡,隨機出來的數,會成為方塊的「座標位置(分別是X和Y兩個參數)」。那n1和n2要怎麼設定,才能讓方塊的圖案,保持在畫面之間呢?

因為文字不好說明,所以我用以下這張圖,來向各位進行解釋:

n1和n2的圖解

n1和n2的圖解


由於我們將方塊的原點,設置在左上角,因此,如果不要讓方塊超出畫面,那X座標的最大值(也就是n2),就會是「房間的寬度減掉方塊的寬度」。

至於X的最小值(n1),就會是房間的原點座標,因此會等於0。

Y座標的原理,跟X座標是一樣的,只是使用的參數改成了「高度」而已。


🔸邏輯設計03


文字版的第17行,為第三項的程式設計。這裡要講解的程式碼,如下:

mouse_check_button_pressed( mb ) ;

if mouse_check_button_pressed( mb_left )
{
1926行的程式碼」
}


mouse_check_button_pressed(mb)的功能,是用來檢查,滑鼠的某個按鍵是否有按下。有的話,會回傳true,表示有按下;沒有的話,會回傳false,表示沒有按下。

至於要檢查哪個按鍵,則是由括弧裡的mb參數來決定。這裡我們使用mb_left,這表示檢查滑鼠的左鍵。

當if收到true的指令,那就表示左鍵有按下,那就會執行if裡面的程式碼,也就是「19~26行的程式碼」。


這邊要補充說明一下,這個檢查的功能,只有在「按下的瞬間」,才會觸發,當滑鼠「向上放開」時,並不會有效果。

當我們使用按鈕(不論是鍵盤或滑鼠)時,其實是會觸發「按下」和「放開」兩種狀態,因此在設計程式時,要注意遊戲要用哪個狀態,會比較適合。

備註:實際上除了上面兩種狀態之外,還有其他的檢查方式。通常都是我們有需求時,才會去官方的說明書裡,查看相關的使用方式。


🔸邏輯設計04


文字版的第19行~第20行,為第四項的程式設計。這裡要講解的程式碼,如下:

if mouse_x >= block_x && mouse_x <= block_x + sprite_get_width(0)
&& mouse_y >= block_y && mouse_y <= block_y + sprite_get_height(0)
{
2226行的程式碼」
}


其實這段程式的邏輯,在「顯示出評價B」的例子中,就已經解釋過,只是「範圍」變得比較複雜而已。

由於方塊的座標是由兩個參數(X和Y)所組成,所以條件就要變成,同時滿足X的區間範圍,和Y的區間範圍。最終,就變成了要同時滿足,四個數值的條件狀況。

用下面這張圖,各位應該就能了解,X座標的數值範圍(Y座標的部分,只要把參數換成「高度」即可):

X座標範圍的圖解

X座標範圍的圖解


🔸邏輯設計05


文字版的第22行~第26行,為第五項的程式設計。這部分的內容與「邏輯設計02」相同,所以就不再贅述。


結語


這邊我想聲明一件事情,在這篇教學當中,有些用來解釋的名詞,是我自己發明的,例如:自訂參數和內建參數。

因為我認為使用這種名詞,能讓初學者們,更快的認識GameMaker。如果你去翻官方說明書,只會看到變數、賦值、內建變數、資料型態,這些很深奧的名詞。

如果你沒有任何程式背景,在看完這些名詞解釋之後,相信你就會放棄寫程式了,但這不是我想要的結果。


雖然我的解釋,會比傳統的說明書簡單,但這也會衍生出另一個問題:

如果你拿我的這些詞彙,去跟「傳統的」工程師溝通,他們可能會聽不懂。

解決這個問題方法,也就只有把那些,很複雜的專有名詞,塞進自己的腦袋瓜裡面。

之後,我也會考慮,去解釋那些麻煩的專有名詞,但那可能會是蠻後面的事情了。有興趣的話,各位可以等等看。


另外,自訂參數在這個範例中,似乎沒什麼用處,但實際上,他們的用途非常廣。

例如:玩家的速度、玩家的血量、怪物的血量,這些都會使用到自訂參數。

如果要製作出好的遊戲,自訂參數的設計,絕對是不能忽視的重要因素之一。




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


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

免費、開心、簡單,這是我做教學的理念,我希望透過我的行動,讓人們找回自我學習的快樂,讓那些資源稀少的自學者們,也能朝著自己的夢想來前進。讓我們一起開心的做出遊戲吧!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
這篇內容,將透過實戰教學,介紹GameMaker中的Event。包括Event的簡介、Create的講解、Step的講解、Events的基本操作。
這篇內容,將透過實戰教學,介紹GameMaker中的Camera。包括Camera的簡介、設定Camera的方法、Viewport的介紹。
這篇內容,將透過實戰教學,介紹GameMaker中的Room。包括Room的簡介、調整寬高、圖層功能的概述、用Object來建立實體。
這篇內容,將透過實戰教學,介紹GameMaker中的Object。包括如何建立新的Object、Object和Sprite的關係、設定Sprite參數。
這篇內容,將透過實戰教學,介紹GameMaker中的Sprite。包括建立新的Sprite、重新命名及刪除、建議的命名方式、編輯圖像、調整圖像大小、動畫的概述、原點設置、碰撞遮罩的概述。
這篇內容,將簡單介紹Asset Browser、Workspace、Inspector、Code Browser,作為入門的介面導覽。
這篇內容,將透過實戰教學,介紹GameMaker中的Event。包括Event的簡介、Create的講解、Step的講解、Events的基本操作。
這篇內容,將透過實戰教學,介紹GameMaker中的Camera。包括Camera的簡介、設定Camera的方法、Viewport的介紹。
這篇內容,將透過實戰教學,介紹GameMaker中的Room。包括Room的簡介、調整寬高、圖層功能的概述、用Object來建立實體。
這篇內容,將透過實戰教學,介紹GameMaker中的Object。包括如何建立新的Object、Object和Sprite的關係、設定Sprite參數。
這篇內容,將透過實戰教學,介紹GameMaker中的Sprite。包括建立新的Sprite、重新命名及刪除、建議的命名方式、編輯圖像、調整圖像大小、動畫的概述、原點設置、碰撞遮罩的概述。
這篇內容,將簡單介紹Asset Browser、Workspace、Inspector、Code Browser,作為入門的介面導覽。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
※ 好用的陣列迭代器:forEach forEach 的使用時機: 需要從頭到尾把陣列中的每一個元素都印出來 ,就適合使用 forEach 方法。 forEach 的必要參數是一個函式: forEach() 的功能是把陣列的每個元素都丟進某個函式執行一次,因此必要的參數是一個函式。 語法:
Thumbnail
pipe 代表函數式程式設計中的概念,利用多個功能結合在一起,資料依序通過每個功能進行處理。文章中介紹了 pipe 的優點、兩個等效的程式碼比較以及 remeda 套件的使用。詳細介紹了使用 pipe 的好處,並提供了多個相關的例子,展示了 pipe 可讀性的提升。
Thumbnail
上週我一位在美國工作的朋友Jason,偶然間讀了我之前寫的文章「No-code 結合 AI 很無敵?公司想引進先評估這 3 點」,立刻 LINE 我,表示他正在經歷公司引進 No-Code、Low-Code(無程式碼、低程式碼)技術帶來的新挑戰,Jason 跟我分享的內容實在太「切身之痛」。
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 我們開發程式的時候, 常常會使用Git來管理我們的
Thumbnail
幾天不用,剛剛發現之前的程式碼已經不能使用了,我想可能是因為html結構有所改變,之前的程式碼可以看下面這一篇文章 【程式碼教學】追蹤自己 Vocus文章每日流量,第二版 1027 更新後的程式碼 import csv from bs4 import BeautifulSoup
Thumbnail
PyInstaller 是一個強大的工具,可以將 Python 程式碼打包成獨立的可執行檔案,讓你的程式可以在沒有 Python 解釋器的情況下運行。這對於分享和分發你的 Python 應用程式非常有用。以下是使用 PyInstaller 的基本步驟:
Thumbnail
~開始準備練習考照前,請務必下載Spyder~ 為何要下載Spyder? 學校與聯成電腦考照,都是用Spyder。 輸入程式碼,執行看結果。 使用Spyder,按tab鍵,省去打字時間。 將執行成功的程式碼,複製貼上到CodeJudger即時線上評分。 這篇主要是透過Anaconda安裝下載Spy
Thumbnail
國道用路人注意!近日有許多民眾收到「假的」etag遠通國道通行費催繳簡訊,防詐達人發現,這不只是將你帶到假的收費網站,如果你是Andriod用戶,還有可能被誘導安裝惡意的木馬程式,不只個資全洩漏,也可能導致金融帳戶被竊取,種種恐怖攻擊如何防禦,就看這一篇
Thumbnail
<!DOCTYPE html> <html> <title>HTML Tutorial</title> <body> <h1>This is a heading</h1> <p>This is a paragraph.</p> </body> </html>
Thumbnail
泰國內閣日前批准皇家學會提議,將曼谷英文「Bangkok」改成「Krung Thep Maha Nakhon」兩者都能續用 作者:城市學編輯部 2月15日,泰國內閣同意皇家學會提議,對國家、領土、行政區和首都城市名稱的寫法進行修改,並提交給內閣批准。 延伸閱讀 延伸閱讀 延伸閱讀 延伸閱讀
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
※ 好用的陣列迭代器:forEach forEach 的使用時機: 需要從頭到尾把陣列中的每一個元素都印出來 ,就適合使用 forEach 方法。 forEach 的必要參數是一個函式: forEach() 的功能是把陣列的每個元素都丟進某個函式執行一次,因此必要的參數是一個函式。 語法:
Thumbnail
pipe 代表函數式程式設計中的概念,利用多個功能結合在一起,資料依序通過每個功能進行處理。文章中介紹了 pipe 的優點、兩個等效的程式碼比較以及 remeda 套件的使用。詳細介紹了使用 pipe 的好處,並提供了多個相關的例子,展示了 pipe 可讀性的提升。
Thumbnail
上週我一位在美國工作的朋友Jason,偶然間讀了我之前寫的文章「No-code 結合 AI 很無敵?公司想引進先評估這 3 點」,立刻 LINE 我,表示他正在經歷公司引進 No-Code、Low-Code(無程式碼、低程式碼)技術帶來的新挑戰,Jason 跟我分享的內容實在太「切身之痛」。
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 我們開發程式的時候, 常常會使用Git來管理我們的
Thumbnail
幾天不用,剛剛發現之前的程式碼已經不能使用了,我想可能是因為html結構有所改變,之前的程式碼可以看下面這一篇文章 【程式碼教學】追蹤自己 Vocus文章每日流量,第二版 1027 更新後的程式碼 import csv from bs4 import BeautifulSoup
Thumbnail
PyInstaller 是一個強大的工具,可以將 Python 程式碼打包成獨立的可執行檔案,讓你的程式可以在沒有 Python 解釋器的情況下運行。這對於分享和分發你的 Python 應用程式非常有用。以下是使用 PyInstaller 的基本步驟:
Thumbnail
~開始準備練習考照前,請務必下載Spyder~ 為何要下載Spyder? 學校與聯成電腦考照,都是用Spyder。 輸入程式碼,執行看結果。 使用Spyder,按tab鍵,省去打字時間。 將執行成功的程式碼,複製貼上到CodeJudger即時線上評分。 這篇主要是透過Anaconda安裝下載Spy
Thumbnail
國道用路人注意!近日有許多民眾收到「假的」etag遠通國道通行費催繳簡訊,防詐達人發現,這不只是將你帶到假的收費網站,如果你是Andriod用戶,還有可能被誘導安裝惡意的木馬程式,不只個資全洩漏,也可能導致金融帳戶被竊取,種種恐怖攻擊如何防禦,就看這一篇
Thumbnail
<!DOCTYPE html> <html> <title>HTML Tutorial</title> <body> <h1>This is a heading</h1> <p>This is a paragraph.</p> </body> </html>
Thumbnail
泰國內閣日前批准皇家學會提議,將曼谷英文「Bangkok」改成「Krung Thep Maha Nakhon」兩者都能續用 作者:城市學編輯部 2月15日,泰國內閣同意皇家學會提議,對國家、領土、行政區和首都城市名稱的寫法進行修改,並提交給內閣批准。 延伸閱讀 延伸閱讀 延伸閱讀 延伸閱讀