LV. 20
GP 473

【攻略】CSO lua零基礎小教室(四)淺談API

樓主 misk yrgna1234
GP9 BP-
大家好 我是misk
上次教了大家表(table)的用法
照理來說,有了前三章的文章,您就能看懂API了
不過,我知道如果您從來沒碰過程式,絕對是看不太懂
就像是你會ABCDE到Z,但是如果拼在一起您就不會了
所以,這次除了跟大家說明API之外,還會講解資料型態
希望大家能學會。

另外,本人也不是什麼資訊科的
所以有些部分如果有更詳細或錯誤的資訊,還請您告知喔~
感恩!

如果還沒看過之前的文章,請前往:

淺談檔案
1.project.json
簡單來說是將game.lua跟ui.lua包裝後執行的檔案,你可能會問說:可不可以自己加入檔案?
答案是可以的。
但我們目前不說明這個,應該說......我們也不太需要。

2.game.lua
這個檔案主要是在管理:
遊戲規則
角色(玩家或怪物)
裝置方塊
所以當您想到一個新想法時,卻對整體的程式架構還不熟悉,那就請您將這點記起來,方便您建立架構,寫出整齊的程式。

3.ui.lua
這個檔案主要是在管理:
個人
螢幕介面
一樣,當你想了一個新想法,請將這點熟記。

執行方式
通常我們可以將game與ui的互動方式簡單的畫成一張圖。

沒錯,這樣的互動方式就很像是game.lua在發號施令,或是在控制遊戲,控制角色。而身為"角色"的玩家則是跟ui有關,例如按鍵盤這種"個人"的事情就是跟ui有關。

執行檔案順序
如何測試優先順序?很簡單。
我們在game.lua中寫一行:print("game")
接著在ui.lua也寫一行:print("UI")
意思是說,如果程式跑到game,就會在上次說明的地方(在遊戲中按~就能看到)顯示"game"這句話,同樣的,如果程式跑到ui,就會印出"UI"這行字。

實現結果如下。
實驗結果顯示是先跑game.lua再跑ui.lua。
(此為順帶一提而已,對寫程式並沒什麼影響呵呵)

API說明
這邊再解釋一次API的意思,簡單來說就是遊戲跟程式之前互動的橋樑,例如說我們在編輯模式中,按下C鍵可以選擇您想建立的方塊,裝飾或裝置方塊,而API就跟這些東西一樣,你可以選擇並使用,只是使用方式並不是創造槍,則是程式碼。

接下來,請大家前往CSO API官網。

點進去後,請看左邊的Modules,我們目前只會說明game跟ui。
圖片紅框中的game跟ui就是它們的全部資料了,而下方有什麼Game.Entity、Game.Rule,這些都跟程式的"物件"有關,但是我們目前都會用"表"的方式讓大家盡量理解。
意思很簡單,你可以想像成Game是一個箱子,裡面裝著Entity、Rule、Monster......等小箱子,而這些小箱子裡面又有很多的小小箱子......,等等會出現Game.EntityBlock當例子(這樣層層包裝的概念就跟表的概念差不多)。
請注意:Modules中的UI只能在ui.lua中使用,而Game只能在Game.lua中使用。


例子:我們點選Game.EntityBlock。
進去後你會看到4個新東西(小小箱子的分類),分別有Tables,Fields,Methods,Event Callback,這邊一一解釋。

Tables
意思是說這個下方的資料型態都是表(table),我們可以點Game.EntityBlock.position,它會導引你到這裡。
這邊它都會詳細解釋這個表之中的元素有哪些,例如這裡就表示這個表"Game.EntityBlock.position"中有三個,分別為x, y, z的元素。而括號之中的int指的是整數,意思是說,你之後在使用或設定時,這些元素都要是整數,不然可能會無法執行。

Field
這個是程式中"物件"的東西,這邊您不需要太了解這個,因為這比較難,這邊用舉例的方式解說。
上方是用Game.EntityBlock做例子,你會問:這是什麼?
其實我們在遊戲中用的一個個裝置方塊,都是個Game.EntityBlock,而這些裝置方塊(Game.EntityBlock)其實可以說成是一個表(table)(目前先這樣解釋),而他們的元素呢,就是Field。
在例子中,Field有id、position、onoff,也就是說,您目前可以將Field當成是"表的元素"

Methods
這個一樣是物件的東西,這邊也一樣直接舉例。
在上方的例子,你會看到兩個東西,分別是
Game.EntityBlock:Create(position)
Game.EntityBlock:Event(arg, index)
沒錯,你只要看到()就表示這是一個函式,你可以使用Methods下方列出的函式,但這些不能重新宣告。

Event Callback
上方例子中有兩個函式,這些跟Methods不同的是:他們可以重新宣告。
也就是說,您可以在程式碼中自己宣告您需要的函式內容,這就是跟Methods不同的地方。

以機器來做比較的話,Methods就是只能使用機器,而Event Callback就是你可以組裝機器,大約如此。

淺談物件
它跟表很像,所以我才想說先用表的方式讓大家理解,但畢竟這跟表不太一樣,所以還是稍微說明物件的原理。
剛剛提到Field跟Methods,而這些都跟物件有關,為了讓大家好懂一些,我用飲料機來說明。
飲料機為"物件"
Field就像是飲料機內的冰塊、可樂跟果汁(物品元素)
而Method就是倒出飲料機內的飲料(用函式做動作)

像剛剛的Game.EntityBlock例子中,我們可以使用Game.EntityBlock:Create(position)在程式中建立一個裝置方塊(Game.EntityBlock物件),這樣我們就可以在程式中使用這個裝置方塊的元素跟動作了。

非常感謝大家觀看,這次的章節算難,所以請大家多看幾遍喔嘿嘿。
然後這次好像沒有問題能出了 : (

下一章:
9
-
LV. 20
GP 480
2 樓 misk yrgna1234
GP3 BP-
(我print(Common['WEAPON']['ShiningHeartRod']).然後控制台給了1個KEY 449 請問有沒有方法能輸入449然後輸出ShiningHeartRod呢?)

本人目前想到一個方式
1.創建一個表”temp”。
2.將Common[“WEAPON”]這個表丟進迴圈中,用”temp”記錄並交換所有元素跟值。

temp = {}
for I, j in pairs(Common[“WEAPON”]) do
    temp[j] = I
end

這樣temp[449]就會等於ShiningHeartRod了。
算是比較懶人的方法哈哈
3
-
未登入的勇者,要加入 3 樓的討論嗎?
板務人員:

3667 筆精華,10/13 更新
一個月內新增 2
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】