創作內容

7 GP

RM的腳本教學–事件指令跟插件

作者:銷魂眼│2017-02-05 19:51:34│巴幣:22│人氣:996
RM的腳本教學–事件指令跟插件
前言
你好!這裡是菜逼八程式銷魂眼
前陣子為了做RMMV的插件而開始首次開認真捉摸RM的程式結構
於是爬遍了小弟所知道的各大論壇、頻道,卻只找到了一些基本程式概念教學
結果踏上了從零開始的解析RM程式生活
也許是小弟的搜尋能力不足,可能已經有更詳細的教學文,如果真有那還請告知小弟一聲
就如大家所知道的那樣,接手別人寫下來的系統絕對不是一件好受的事
雖然說RM的系統已經不算寫的很爛,但是我還是花了一個多星期才搞懂一點點
也可能因為小弟是菜逼八,所以才有這樣的感想吧
無論如何,為了減少以後有同樣的人走上這條冤枉路的機率,於是這篇文就誕生了

溫馨提示
1. 本文的例子大部分以MV版本跟JS語言為準
不過其他版本的使用者也不用擔心,RM這麼多的系列以來
系統的結構好像都大同小異,至少XP開始好像是…(先戴頭盔)
2. 善用已有資源
國外有大神在雲端建立了RMMV的JS指令列表,超好用!
還有官方插件作參考
3. 本文不會提供RM基本事件用法JS語法跟程式相關的知識
其實自己辜狗一下就一堆相關的教學啦,如果真的有需要再跟小弟說吧
4. 歡迎糾正跟提出建議
由於RM的程式碼實在是太多,以下只解說小部份
實用例子暫時先不透露,大家可以想想怎麼應用
歡迎問問題
5. 下面分為事件指令代碼/參數、插件參數/指令,4個部份

事件指令代碼
就如大家所知道的那樣,事件頁是程式碼圖形介面化後的型態
那麼事件頁程式碼化後的又是什麼樣子呢
以下舉個例子:

以上事件頁有多少個事件指令?
沒錯!是4個:顯示文本、顯示選項、兩個操作變量
那麼程式碼化後又有多少個指令呢?(答案反白,希望你先想一想)
11個,因為事件頁有11行包括最後一行空白
那麼這些指令內又涉及了什麼functions呢,這裡就要打開內建的JS檔一看究竟了

所有與事件指令有關的fuctions應該都在上圖objects檔案Game_Interpreter這個class裡了
那麼要怎麼知道每個指令是對應哪個function呢?
問它就好了啊XD

我這裡做了一個loop來問整頁指令的代碼
this._list代表這個事件頁指令的陣列
用length則能找出這個事件頁有多少行
陣列內的數代表這是第幾行指令,也可以用this._index代表當前是第幾行
例如this._list[this._index]代表當前的指令,this._list[0]代表第一行的指令
注意:index是從0開始算的
也可以用this.currentCommand()代表this._list[this._index]
code則用作取得指令的代碼
$gameMessage代表文本框框,add代表顯示在下一行
像$gameMessage這種呼叫object的句法都可以在這裡找到,下面不會再多說
注意:文本只能顯示strings,不能顯示數值,所以要先轉換成string再顯示

加上我之後加進去的3行指令有14個指令
至於這些數字代表什麼,那就在Game_Interpreter這個class裡找吧


是的你沒看錯!小弟我最初在幾萬行的程式裡爬走才找到這些指令的來源
因為當時不知道指令的結構,希望大家別像我這樣走冤枉路
每個代碼對應function的名稱
這裡就不詳解每個function裡面裝了什麼了,真解起來這要多長啊...
大家可以先自己嚐試解,真的有部份function需要小弟詳解就再提出吧
機智的你可能已經發現了,怎麼沒有command0這個function?
沒錯!0就是事件頁最後一行指令

事件指令參數
跟用code取得指令的代碼同理,用paraemters則能取得指令的參數
要注意的是不同的指令,參數的數量都不一樣
繼續用同一個例子

輸出




每個逗號都是用來隔開參數
當然參數實際代入function裡時是不會連分隔用的逗號都一起代入
這只是陣列轉換成string時顯示出來的樣子
例如第一行有3個逗號代表有4個參數,只是第一個參數是什麼都沒有
分別代表圖片檔案名稱、圖片中第幾格(內建預設一張有8格頭像)、窗口類型、位置類型
而第二行則只有文本內容的一個參數
有些指令沒有參數,所以會出現空白行
像是哪個指令有哪些參數代表什麼,都可以在各個指令function中找到

還是老話,現在全部解釋出來太長了,有小細節看不懂再問吧
以上的例子包括代碼部份,不只限用於文本指令,適用於任何事件指令
也就是滿滿的三頁事件指令裡面的全部

插件參數
接下來的是插件部份
插件功能可以說是MV這個版本所增最實用的功能了!
以前的版本要讓插件在事件裡執行,需要把程式碼複製在腳本裡,然後在程式碼裡輸入參數
對工程師而言多此一舉,對其他插件使用者而言不好理解
在MV版裡插件功能被獨立了出來,使用者可以不用輸入任何的程式碼
首先所有的程式碼都必需存放於plugins資料夾,且為JS檔案
下面用官方插件作例子

從 /*: 到 */ 是用於控制插件基本設置,因此裡面的所有設定都會被顯示在插件管理器上
/*:
* @plugindesc 這裡開始輸入插件簡介
* 因為這裡能顯示的字很有限,不建議太長
* @author 作者名
*
* @param 參數名稱
* @desc 情況跟plugindesc一樣
* @default 該參數的預設值
*
* @help 無長度限制的注釋,從這一行開始輸入
* help的第二行
*/
//@param @desc @default 可以複數生效,其他不行

var parameters = PluginManager.parameters('這裡輸入本插件檔案的主檔名'); //設置參數必須
var 代表參數的變量名稱 = 變量型態(parameters['對應上面基本設置的參數名稱']  || 對應上面該參數的預設值);
變量型態為數值時則為parseInt
/*: */ 裡面的string不需用' '辨識,但是宣告參數變量而預設值為string時則需照常用' '標示
這樣就可以在插件裡引用這個變量了
使用者只需在RM的插件管理器裡輸入或更改參數,就可以直接影響插件內的functions

插件指令
接着是插件指令,就是事件指令第三頁的那個
跟插件參數不同的就是透過事件指令觸發
照樣用ItemBook這個例子

var _Game_Interpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    //設置插件指令到這裡為止都應該沒有變化
    if (command === '插件指令第一部份') {
        switch (arg[0]) {
        case '插件指令第二部份':
            //執行內容
            break;
        case '插件指令第二部份':
            //執行內容
            break; //最後一個case裡的break應該是可有可無的
        }
    }
};
插件指令使用例子(對應上方例子):

注意:arg默認輸入的值為string,數值需包加上Number()
arg[這裡代表讀取所輸入插件指令當中第幾個部份],0是第2部份、1是第3部份,如此類推
關於第1部份回頭往上看
第1部份被存放了在command
理論上插件指令可以無限長,可以達到arg[無限]
指令不能設置空白鍵,因為要透過空白鍵判斷指令的部份
當然你也可以不用例子的寫法,不用switch不用if (command === '') 之類的
反正在call那裡已經接收了插件指令裡的參數,下面怎麼運用就視乎你

機智的你應該也汪意到
插件參數只能接收固定值
從遊戲開始到結束該參數不能被更改
但是插件指令能在事件裡被任意使用,甚至跟其他變量配搭使用
所以插件指令是可以完全取代插件參數的功能

這篇就暫時先到這裡(byte要爆炸了)
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3470286
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

7喜歡★ecstasyeye 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:自製遊戲公會成員報到單... 後一篇:【團隊徵人】2017年度...

追蹤私訊切換新版閱覽

作品資料夾

a4516【巴哈姆特事紀】
骯,《外傳.命之章》第27集〈法、理、情〉。呀,各位今天都好嗎?為國家和平努力不懈的中流砥柱們。看更多我要大聲說昨天16:34


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

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