Basic Concept

出自很讚的遊戲編輯器

跳轉到: 導航, 搜尋

目錄

ID

在Good裡面,ID是一個非常重要的概念,必須要先了解。

所有東西都有ID

在編輯器裡,所有資源不論是什麼樣的種類,在屬性檢視器裡面都可以看到有個ID屬性。除此之外,在關卡資源裡的所有物件也都擁有自己的ID。ID是個數字,-1或0都代表一個無效的值。

每一個ID都是唯一

所有使用到的ID,無論是資源項目的ID或者是物件的ID,每一個都是獨一無二的。也就是說如果有個精靈資源的ID是12,那麼12這個ID就會只有一個,不會再有另一個資源或是物件的ID也是12。

ID可以重覆使用

Good裡所使用的ID都是由編輯器或是RunTime維護及分配使用,當一個資源或物件被刪除時,這個資源或物件原來使用的ID就會被回收。而被回收的ID並不一定會被立即重覆使用,有可能在你作了幾次新增動作之後才發現到,新增的資源或物件被分配到一個被回收的ID。當然也有可能在你刪除了一個資源或物件之後,被回收的ID立刻就被重覆使用在下一個新增的資源或物件上。

有一點必需要保證的是,在同一時間裡面,所有正在使用中的ID都是獨一無二的。

Runtime時期

當你在編輯器工具列上點擊Play鈕時,Good RunTime會載入第一個關卡資源,根據第一個關卡資源的內容,建立起所有的物件,這些物件包含貼圖物件、地圖物件和精靈物件等。Good RunTime會根據在關卡編輯器裡所編輯的物件次序和類別以及其相關屬性,一個一個把這些物件建立起來。

其中最重要的是,當我們使用關卡編輯器作編輯時,關卡中的每一個物件都會自動分配到一個ID。而RunTime在建立這些物件時,同樣的也會分配一模一樣的ID給這些RunTime物件。

因為在執行過程中的ID使用原則一樣遵守上面所列的三項原則,所以動態刪除的物件的ID會被回收,而動態產生出來的新物件的ID也可能會是重覆使用舊ID。

資源及物件

資源及物件的區分也是一個需要知道的基本概念。

資源及物件的分別

資源和物件(RunTime物件)的差別,最簡單的區分方法是:所有在編輯器裡面編輯的東西都叫作資源,而所有在執行時遊戲的畫面上看到(包含看不到)的東西都叫作物件。

關於資源的部份用這樣子作解釋應該不會有什麼問題,只有一個小地方要再注意一下。在關卡編輯器裡擺設的東西,我們也叫作物件(關卡物件)。不過這點也不會有太大衝突,只要記住一點,因為我們是在編輯器裡編輯這個關卡,所以這關卡是個資源,而關卡裡的東西也同樣都是資源。

物件的建立

至於在RunTime時期,所有東西都是物件這件事應該也不難理解。既然說所有東西都是物件,自然也包含了關卡本身。

RunTime物件會在建立時根據它所參考資料類別作初始化。例如說參考了一個精靈資源來建立一個物件,RunTime就會建立出一個精靈物件給你。而參考了一個關卡物件,RunTime就會建立一個關卡物件給你,當然也連帶的將關卡底下的所有子物件一起建立起來。

在RunTime時期關卡物件只能有唯一個,而其它類別的物件則數量不定,且它們的Parent都是那個唯一的關卡物件。

事件

在Good裡面,每一個物件在被建立時可以和事件處理器(event handler)綁定,也就是說物件是由事件來驅動的。預設的情況下,物件是沒有加上任何事件處理器,所以物件在預設的狀態下是不會動的,也無法和它作互動。要讓物件動起來,或者是能夠和物件作互動,則需要替物件增加事件處理器。

事件處理器

 Level = {}

 Level.OnCreate = function(param)
 end

 Level.OnStep = function(param)
 end

上面的Lua程式碼示範了如何定義一個關卡物件的事件處理器。這個事件處理器可以處理二種事件,OnCreate及OnStep。OnCreate事件是一次性的事件,當一個物件被產生出來時會觸發OnCreate事件,這時我們就可以再OnCreate事件裡作一些其它的初始化動作。而OnStep事件是週期性的事件,根據FPS的設定,每秒會觸發多次的OnStep事件,這時我們就可以在OnStep事件裡處理當務類工作,例如讓物件動起來等。

參考

個人工具