LV. 12
GP 18

【攻略】Studio模式 [Lua]CSO API 總教學

樓主 牛舌餅 quack12865
想要做出一張獨一無二的地圖嗎?
想要做出別人都沒做過的玩法嗎?
Studio從以前到現在也歷經幾年了,在Studio模式還不支援Lua的時候,許多創作者利用裝置方塊做判斷、作流程控制,許多玩法在這些時光中都被挖掘出來,在現在這個時代中,不導入Lua是無法做出更進階的玩法的,你的創作將只會是其他人的腳印,沒有獨特性

正題:
為何有導入Lua,比較容易去追求獨特性?

在Lua中,你可以:
1.控制玩家介面(顯示字串及畫長方形)
2.控制玩家各種元素(如:血量、速度、擊退、位置.......等)
3.使玩家將能被區分(如:A玩家按按鈕有反應,但B玩家按卻沒有)
4.做更方便的流程控制

當然,Lua能做的可不只這些,但是這些就足以提供非常多的玩法了(前提是你要有創意),這就是為何,當一個高級的創作者不能缺少這項技能。

請注意:這則教學著重在API的教學而非程式語言教學,設定教學的人為有寫過程式語言的人。


教學前你所需要具備的能力:
1.至少寫過一種語言(如:C C++ JAVA Python JavaScript.........等)
2.能了解何謂API


目錄:
單元一   如何導入Lua
單元二   關於Lua及CSO所提供的API
單元三   ui.lua 和 game.lua分別的作用
單元四   CSO API常用的函式教學(game篇)
單元五   CSO API常用的函式教學(ui篇)
單元六   同步變數
單元七   新的Lua裝置方塊


單元一   如何導入Lua
首先,開一張新地圖,進去後先按V再按8,會有四個選項,照理來說,只有上面兩個選項能按。
接著按"新創立",然後要選位置,位置指的是檔案釋出的位置,選好後到你剛剛選的資料夾,會發現有3個檔案(ui.lua game.lua project.json),最後回到遊戲,會發現下面兩個的選項都能按了,按下"讀取",選你剛剛創立的資料夾,點進去會發現一個JSON檔,選取它就行了。然後,剩下2個檔案(ui.lua game.lua)沒有用到,沒關西,這兩個檔案就是等等寫LUA的地方了。這兩個檔案分別有不同的特性並且都要寫。


單元二   關於Lua及CSO所提供的API

Lua是一個動態的程式語言,在宣告變數前不需要先宣告它的資料型態,你只需直接給初始值,Lua會自動幫你判斷它的資料型態。例如:  

the_string="我是牛舌餅"

直接這樣打,Lua會直接把 the_string 變數當作是字串的資料型態。
再來,Lua不支援陣列(array),在Lua中唯一和陣列比較像的,就是表(table)。
關於其他有關Lua的基本寫法,請至:
然而,為何在CSO終能無緣無故能用Lua呢?這是因為官方提供了一個自己遊戲的API,使我們能利用Lua控制遊戲
而這個API如何使用,請至:
巴哈也有人整理中文的:
這個網頁裡,提供了所有官方提供的函式及用法。

單元三   ui.lua 和 game.lua分別的作用
首先,請記得,

只要有關
遊戲、全體、角色,通通是game.lua(以下簡稱game)在管理。
只要有關
個人、介面,通通是ui.lua(以下簡稱ui)在管理。

舉個例子:
如果我想控制某個玩家的速度,和"角色"有關,因此,寫在game裡。
如果我想控制某個玩家的螢幕上顯示一個長方形,和"介面"有關,因此,寫在ui裡。
如果我想做一個像新夜襲的時間,和"全體"(每個人都是吃那個時間)有關,因此,寫在game裡。

上面給的官方API的網址,

Modules

裡面也有分game and ui的函式,請各位注意看看。


單元四   CSO API常用的函式教學(game篇)

function Game.Rule:OnUpdate (time)
        --do something
end
說明:
這個函式的作用就是每0.1秒會被呼叫一次,常常用於檢測流程。
參數 time 是個浮點數(float),就是遊戲時間。

function Game.Rule:OnPlayerSignal (player, signal)
        --do something
end
說明:
這個函式只有在有人發送 signal 的時候呼叫,常常會利用判斷式判斷送過來的 signal 種類做相對應的工作。
參數 player 是一個 userdata ,請注意,要控制玩家的數值(如:血量、速度、擊退、位置.......等),就必須先抓到 player 才能做設定,因為那些數值都是player物件(object)底下的成員(member)。
參數 signal 是一個整數(interval),中譯為"訊號",然而訊號由ui傳來,詳情請到ui的章節。

Game.EntityBlock:Create (position)
說明:
讓 game.lua 知道裝置方塊的位置。
搭配以下2個
function Game.EntityBlock:OnTouch (player)
        --do something
end
說明:
如果有人經過了觸發方塊,且那個方塊式已經讓 game 知道了,呼叫這個函式。
參數一樣是 player
function Game.EntityBlock:OnUse (player)
        --do something
end
說明:
如果有人啟動了裝置方塊(更精確的是對那個方塊按E),且那個方塊式已經讓 game 知道了,呼叫這個函式。
參數一樣是 player


單元五   CSO API常用的函式教學(ui篇)

function UI.Rule:OnUpdate (time)
        --do something
end
說明:
這個函式的作用就是每0.1秒會被呼叫一次,常常用於檢測流程。
參數 time 是個浮點數(float),就是遊戲時間。

function UI.Event:OnInput(inputs)
        --do something
end
說明:
當玩家按下某個鍵時,呼叫這個函式。
參數 input 為一個表(table),所有官方可接受的按鍵都是 input 物件的成員,至於官方能接受什麼按鍵,請至上面的API網址查詢。

UI.Text:Create()
說明:
創建一個能顯示字的地方,你可以想像成在修圖軟體上要加字上去會有方框跑出來的動作。
設定你創建的字:
UI.Text:Show()                    在屏幕上顯示。
UI.Text:Hide()                      把字串隱藏。
UI.Text:Set(arg)                更改字串的設定(能設定什麼請到上面網址查詢)。

UI.Box:Create()
說明:
創建一個能顯示圖形的地方。
設定你創建的圖形:
UI.Box:Show()                    在屏幕上顯示。
UI.Box:Hide()                      把圖形隱藏。
UI.Box:Set(arg)                更改圖形的設定(能設定什麼請到上面網址查詢)。

UI.Signal(signal)
說明:
向game送出訊號,其中括號裡只能為整數。

function UI.Event:OnChat(text)
        --do something
end
說明:
當玩家在聊天室打字且送出時,呼叫這個函式。
參數 text 為玩家打字的字。


單元六    同步變數
同步變數是一個很重要的部分,能用在很多地方。如果只照上面所說明的 signal(訊號) 的部分,只能由UI傳到GAME裡,那當需要由GAME傳到UI時呢?
在這之前,請大家要非常注意2個重點:
1.同步只能由GAME同步給UI
2.只能在GAME改同步的值(value)
這其實很好記,GAME是管全體的,如果是由UI(個人)同步給全體,那每個人都改一個同步值,那GAME要選誰?
這就跟你(觀眾)一定要記住演講者的名字而不是演講者記住你一樣。

因此在UI有
function UI.SyncValue:OnSync()
        --do something
end
專門去監控這個同步變數有無被同步

在GAME有Game.SyncValue:Create (name)可以創建一個同步變數(UI不行)

記得:
如果有需要創建一個同步值,這裡用sync變數舉例
在GAME要寫
sync = Game.SyncValue.Create('sync')
在UI要寫
sync = UI.SyncValue.Create('sync')


單元七   新的Lua裝置方塊
這個我簡稱為藍方塊
說明:
它收到訊號時,會呼叫你所打的名字的函式,如果你一開始編輯打 test 那它收到訊號後就會呼叫
function test()
        --do something
end
這個我簡稱為紅方塊
說明:
它是發送訊號的裝置方塊,在GAME(關於"遊戲")裡打上
SetTrigger (name, value)
參數 name 為在裝置方塊上打的名字
參數 value 為布林值(bool)
假設在此裝置方塊裡的編輯打上 test
就可以寫SetTrigger ('test', true)
叫這個名為 test 的紅方塊發送訊號
反之, false 為不發送。



以上就是關於CSO Lua的API教學,我只列出一些常用的部分做強調,如果沒學過程式語言的人不知道在寫什麼是正常的。Lua的基本寫法或想學一個新的程式語言請自己去看教學(我有附網址),以及API請自己去查詢,功能絕對遠不只我寫的這些。
如果需要基礎Lua教學歡迎留言,我會視情況再打一篇。

致 願意學習的你

謝謝您的觀看,有問題歡迎留言
板務人員: