在GMS2中製作對話系統(1/2)

本文為Indienova的Linpean 編寫並授權轉載

原文地址:簡單的對話框體(上)


該教程由油管上的妹子FriendlyCosmonaut原創,能翻牆的盡量看原版吧:Textbox Tutorial。

下面這個是B站的

【GameMaker Studio 2生肉教程】-【GMS2製作RPG對話框系統】-【作者FriendlyCosmonaut】 https://www.bilibili.com/video/av12120494/

代碼託管在Github。實現的效果為:

以下是文本教程

設置遊戲幀數

在option設置里設置遊戲的運行幀數為60.

繪製需要的對話框背景

創建大小為W:400-H100的精靈,並使用繪圖工具,將其塗成純黑色

創建對話框體文本對象

在對象的draw事件進行對話框的繪製

創建一個房間room

並設置房間的大小參數和背景顏色

此時將對象拖動至房間任意一處就能看到效果了,但對話框的還需要繼續優化。

添加觸發事件,文本換行等等。

設置字體

GMS2里的字體可以在font裡面創建,但是對於想要使用整個中文字型檔的用戶,這裡提供一種不同於博主的方法,從外部導入Included Files文件。

添加字體

在繪製文字之前,設置字體

使用draw_text_ext來處理文本換行

第4個參數為行間距,第5個為換行的寬度

然後在create處理化需要的參數

運行遊戲可以看到換行的效果

添加觸發事件來創建對話框

創建玩家player對象來檢測滑鼠點擊事件,在指定的Text層級中創建對話框

將player對象拖到房間中,運行遊戲,點擊滑鼠左鍵,就能看到點擊效果了

將觸發事件更改為碰撞觸發

先創建對象所需要的精靈

然後創建obj_susan對象,並依次為兩個對象指定精靈,然後創建碰撞事件代碼來創建對話框

注意place_meeting只用在非精確碰撞遮罩下才會返回true

運行遊戲即可看到效果:player碰到susan會創建一個對話框

解決每幀創建實例的錯誤

這是一個很常見的錯誤,新手常常不加選擇和判斷在step和draw這類每幀都會被執行的事件創建實例,而舊的實例又沒有被銷毀,運行一段時間後,遊戲就會奔潰。

先把創建的實例的索引賦值給變數myTextBox

然後在draw事件中,繪製實例的id

運行遊戲就會看到實例在不斷的增加,即不斷的被創建。

所以在創建實例時,通過是先檢測要創建的實例存在,如果存在就不需要再創建了

並且注意在銷毀實例時,也需要檢測實例是否存在,避免引用不存在的實例,引起遊戲崩潰

值得注意的是,在銷毀實例後,記得將引用的變數設為noone,否則myTextBox仍然為實例的索引號,下次檢測到碰撞時,檢測變數不為空,就不會創建對話框了。

使人物具有自己的對話文本

我們現在創建的文本就是在obj_TextBox的create事件中初始化好的,但實際上我們希望NPC是具有自己的對話文本的,表達自己的情緒和性格,而obj_TextBox只負責對話框的形式和表現,所以在創建對話框時,使用NPC的文本重新給對話框的文本進行賦值

這樣一來,控制player與susan碰撞,對話框使用就是susan的對話文本「Hello Im Susan」

關於更多的模塊化對話,優化對話框體的表現,將在下節中繼續。


推薦閱讀:

TAG:GameMakerStudio | 遊戲開發 |