投稿記事

power spot. 2023/08/29 22:11

カスタムメニュープラグイン講座(第12回)「戦闘中の呼び出し・メモタグの利用・出来ないこと」

RPGツクールMZ向けのトリアコンタン氏のプラグイン「カスタムメニュープラグイン(SceneCustomMenu.js)」の使い方講座です。

リンク:
カスタムメニュー作成プラグインを調べてみた(とんびさん)
RPGツクールMZ プラグイン講座
RPGツクールVXAce & MV & MZスクリプトwikiとプラグイン

Download → RPGツクールMZ データベース用リファレンス

Download → RPGツクールMZ ゲームデータ用リファレンス


今回は、戦闘中の呼び出し、メモタグの利用と、カスタムメニュープラグインで出来ないことを紹介します。


【1】カスタムメニュープラグインと戦闘シーンについて

カスタムメニュープラグインは戦闘中に呼び出すことが可能です。※ただし、通常のメインメニューから呼び出す場合と違う振る舞いをします。

設定方法は大まかに以下の手順です。
・カスタムメニューAを作成
・コモンイベントBにカスタムメニューA呼び出しのスクリプトを記述
・アイテム、もしくはスキルの使用効果に、上記のコモンイベントBを設定
・戦闘中にアイテム、スキルを使用

前回までの講座で作成したカスタムメニューを呼び出してみました。
かなり無理やり呼び出している感じがしますね。パラメータなどを細かく設定すると見栄えがよくなります。

【2】戦闘用カスタムメニューの設定

前回までのカスタムメニューを戦闘中に呼び出すと、背景はマップシーンの状態が表示されます。これでは戦闘中に呼び出しても魅力が半減してしまいます。
背景を戦闘シーンにするためには、スクリプトコマンドを使用します。

SceneManager.snapForBackground();//画像をスナップ


この場合、コモンイベントを使用してカスタムメニューを呼び出す処理の直前に入れてあります。

これに加え、メニュー呼び出し時の背景ぼかしをオフにします。

以上2つを設定した動作は以下の動画のようになります。

キャンセルイベントでマップシーンに戻るように設定してあるので、戦闘が強○終了しています。


拙作にて、戦闘中にカスタムメニューを呼び出しているシーンを紹介します(開発途中で申し訳ありません)

https://twitter.com/jidoripowerspot/status/1560627540179333120

戦闘中もほぼシームレスに呼び出せれば、特殊なメニューなども違和感なく簡単に作れると思います。


【3】メモタグの利用

ツクールのデータには「メモ欄」が用意されています。これは簡易的なメモを記述するだけではなく、スクリプトを利用して内容を参照することが出来ます。

例えば、データベースのアクターのメモ欄に<value>と記述してあるとします。
アクター1の<value>を参照するためのコードは以下のようになります。

$dataActors[1].meta['value']
$dataActors[1].meta.value

どちらでも参照することが出来ます。
ただし、下の記述の場合は全角文字は参照出来ませんので注意が必要です。

フィルタスクリプト内のテンプレートには以下のような記述があります。

item.meta['value']; // メモ欄に<value>の記述がある

これは一覧取得スクリプトで得たデータがitemとなっているので、一覧取得スクリプトが $dataActors.filter(data => !!data); を選んでいればアクターのデータベースにあるメモ欄を取得出来ます。



一覧取得スクリプトが $gameParty.members(); // パーティメンバー の場合は、やり方が少し変わります。
$gameParty.members(); にした場合、項目描写などでitemと記述すれば、パーティーに居るアクターを一人ずつ参照します。ですが、この$gamePartyで参照されるパーティーメンバー配列のアクターには、メモ欄の情報はありません
パーティーメンバーに居るアクター1のメモ欄を参照するためには、以下のようなコードが必要です。

$dataActors[item._actorId].meta['value'];

順番に見ていくと、

$dataActors[n] → n番目のアクター(データベース)
$dataActors[n].meta['value']; → n番目のアクター(データベース)のメモ欄の<value>
$dataActors[item._actorId].meta['value']; → item(この時はパーティーメンバーのアクター)のアクターIDのデータベースのメモ欄の<value>

となります。記述しているコードが複雑に見えますが、順序良く見ていく(カッコ内やパラメータの値など)ことで、理解しやすくなると思います。

【4】カスタムメニュープラグインで出来ないこと

さまざまな可能性を秘めているカスタムメニュープラグインですが、どうしても出来ないことがありました。それは複数のカーソルを同時に動かす(アクティブにする)ことです

例えばコマンドを横に4つ備えたコマンドウィンドウAがあったとします。それとは別に立てに4つの項目が描写されているウィンドウBがあったとします。

左右のボタンはウィンドウAしか操作できません。
上下のボタンはウィンドウBしか操作できません。

なので、このウィンドウを同時にアクティブにすることが出来れば、左右でAを、上下でBを操作出来るのでは無いかと思いますね。でも、プラグインの仕様で不可となっております


同時にアクティブに出来れば、一回分の操作が省略出来そうだが・・・

さて、講座は今回で一区切りとさせてください。
お伝えしたいことは、大まかではありますが伝えられたと思っております。

次回からは、拙作 Eternal Dragon 続編のメニュー画面を実際に制作していく過程をお伝えしたいと思います。

ありがとうございました。

power spot. 2023/06/18 00:10

カスタムメニュープラグイン講座(第11回)「イベント、項目描写スクリプトの可能性」

RPGツクールMZ向けのトリアコンタン氏のプラグイン「カスタムメニュープラグイン(SceneCustomMenu.js)」の使い方講座です。

リンク:
カスタムメニュー作成プラグインを調べてみた(とんびさん)
RPGツクールMZ プラグイン講座
RPGツクールVXAce & MV & MZスクリプトwikiとプラグイン

Download → RPGツクールMZ データベース用リファレンス

Download → RPGツクールMZ ゲームデータ用リファレンス


今回は、イベント、項目描写スクリプトの可能性を紹介します。


【1】イベントについて

本講座第五回でも紹介しましたが、ウィンドウごとの「イベント」では何かしらの「処理」を行います。引用します。

決定イベント…決定ボタンが押された時の処理。
キャンセルイベント…キャンセルボタンが押された時の処理。
カーソルイベント…カーソルが移動した時の処理。
ボタンイベント…任意のボタンが押された時の処理。

さて、第五回講座でも紹介しましたが、カスタムメニュープラグインのすごいところは各イベントで「コモンイベント」も「スクリプト」も使用出来るということです。
ツクール的なイベントを使いこなせていれば、コモンイベントを呼び出せるといろんなことが出来るでしょう。

今回は「スクリプト」に焦点を当てたいと思います。

例えば、決定イベントで「特定のスイッチ:nをON」にする場合は、各イベントのパラメータ「スイッチ(SwitchId)はn」と設定すれば、イベント発生時にスイッチ:nがONになります。
しかし、これが決定イベントでスイッチ:をON、キャンセルイベントのときにはスイッチ:nをOFFにしたいというときはどの様にパラメータを設定すれば良いでしょうか。

1つはコモンイベントを使用する場合です。

キャンセルイベントでコモンイベント:mを呼び出す処理を設定します。
コモンイベント:mではスイッチnをOFFにする処理をイベント処理として入力します。
これでキャンセルイベントでスイッチ:nをOFFにする処理が出来ます。
ですが、これではイベントごとにコモンイベントを1つ消費する非効率的な使用となってしまいます。スイッチ1つをOFFにするぐらいはコモンイベントを介せず処理したいですね。


スイッチ1つだけ操作するのにコモンイベント1つ消費はもったいない

そこで、2つ目のやり方です。パラメータのスクリプトにスイッチ:nをオフにする処理を記述します。

$gameSwitches.setValue(n,false); //n番のゲーム用スイッチをOFF(false)にする

このように記述すれば、コモンイベントを消費せずにスイッチOFFの操作が出来ます。



【2】イベント処理(スクリプト)の記述の仕方

さて上記のやり方では、スイッチを1つしかOFFに出来ません。コモンイベントならばイベント内に処理をいくらでも記述出来るので、処理が複雑になるならばやはりコモンイベントに頼らざるを得ない・・・ そう考えるのは自然なことです。
実際、処理が複雑化するならばコモンイベント使うほうが管理も簡単だし、処理の流れの把握を確認するのも容易だと思います。
ただ、今回の例のようにスイッチを1つOFFに加えもう1処理、2処理ぐらいはコモンイベントを介せず記述出来れば・・・ そのやり方を紹介します。

JavaScriptでは、エディタ上では処理を記述したあと、; 」(セミコロン)を入力して改行しています。これはツクールのイベントと同じで、処理の次の段階に移行するという意味です。
ただ、ここで重要なのは、「 ; 」は必須ですが、改行は必須ではないということです。【重要!】
つまり複数行に渡って処理を記述してあるスクリプトは、1行にまとめても良いのです。

先程のスイッチを1つではなく、3つ処理するための記述は以下のようになります。

$gameSwitches.setValue(10,false); //10番のゲーム用スイッチをOFF(false)にする
$gameSwitches.setValue(25,true); //25番のゲーム用スイッチをON(true)にする
$gameSwitches.setValue(487,true); //487番のゲーム用スイッチをON(true)にする

「;」を省かずに1行にまとめてみます。

$gameSwitches.setValue(10,false);$gameSwitches.setValue(25,true); $gameSwitches.setValue(487,true); 

これをイベントの「スクリプト」に記述すれば、3つのスイッチ操作を処理することが出来ます。



【3】イベント系スクリプト記述の応用編

スクリプト記述で、処理のコードが長い時には一行で入力すれば処理出来ることが分かりました。
それでも、コード自身が長くなり過ぎると、可読性が悪くなったり、修正が大変なので、長い記述はおすすめしません。

応用編として紹介するのは、自分でスクリプト(メソッド)をプラグインファイルに追加し、それを呼び出す方法です。

記述するためのファイルは、トリアコンタン氏が用意してくれたものを利用してみます。

Download → SceneCustomMenuEx.js

ファイルをダウンロードし、ツクールのプロジェクトにプラグインをインストールします。
この時、SceneCustomMenuEx.jsはカスタムメニュープラグインの下になるようにします。


イベント処理のメソッドは、「Scene_CustomMenu」クラスから参照されます。
例えば、メソッド名を「testFunction」とした場合、イベント処理のスクリプトで呼び出すためには次のように記述します。

Scene_CustomMenu.prototype.testFunction = function(){
//処理を記述
}

ツクールのイベントに例えるならば、「testFunctionという名前のコモンイベントを追加」と言う感じでしょうか。

この中に処理を記述し、カスタムメニュープラグイン内のイベント処理・スクリプトには以下のように記述します。

this.testFunction();


以下がテスト用のコードです。呼び出されたタイミングでalert()でポップアップウィンドウを表示しています。

Scene_CustomMenu.prototype.testFunction = function(){
 alert("testFunctionの処理");
}

テストプレーの様子です。

カーソルイベントにて処理を発動させています


【4】項目描写スクリプト

上記のイベントで1行にまとめる方法を紹介しました。これは「項目描写スクリプト」でも同様のやり方で複数の処理を実行出来ます。
ただ、項目描写スクリプト自体が複数項目を入力出来るので、特殊なやり方を紹介します。

ifやswitchを使った処理を1行で記述する事が出来ます。

例えば、itemにアクター情報が格納されている状態(一覧取得スクリプト→[this._actor]; // メインメニューで選択したアクター)で、アクター1の時はテキストの色を青、アクター1以外はテキストの色を黄色にしたいとします。
その場合のコードは、以下のようになります。

if(item._actorId === 1){
  this.changeTextColor("#FFFF00");
}else{
  this.changeTextColor("#0000FF")
}

これを一行で記述して項目描写スクリプトに入力します。

if(item._actorId === 1){this.changeTextColor("#FFFF00");}else{this.changeTextColor("#0000FF")}

カーソル移動時にウィンドウの再描画スイッチをONにすることを忘れないように注意してください。

【5】項目描写スクリプトの応用編

一行で記述することはなるべく避けたいとして、イベント系スクリプトのようにプラグイン自体にメソッドを追加する方法です。
項目描写スクリプトは、クラス「Window_CustomMenu」です。
こちらにメソッドを追加してよりカスタマイズしてもよいでしょう。
メソッドを追加したら、項目描写スクリプトで記述します。


【6】応用編 ウィンドウを動かしてみる

ウィンドウを動かすプラグインを利用してみましょう。
以下の2つのプラグインを導入する必要があります。

プラグイン1 → ZinTween
プラグイン2 → ZinWindowTween
Download → huuzin(GitHub)
作者 → 風塵様

こちらのプラグインを導入すると、ウィンドウを上下左右に動かすことが出来ます。

次に、ウィンドウを動かすコードです。
x座標のみ移動するメソッドです。指定の座標xに向かって移動します。

window.ztXMoveTo(x,duration); // x:x座標、duration:時間

具体的に見ていきます。
シーンで生成されるウィンドウは、this._windowLayer.childrenという配列に格納されます。
例として、「x座標250に0.7秒かけて移動するウィンドウ」を挙げると

this._windowLayer.children[3].ztXMoveTo(250,0.7); //x:250に0.7秒かけて移動

となります。実際に使用する数値に修正し、上記コードをイベント(決定イベンドなど)のスクリプトに入力します。


ウィンドウの初期X座標を-800に設定。キャンセルイベントも同様にしてスクリプトを記述しています。

ウィンドウの生成順によってchildren[n]は変化します。自分で数値nを変えて試し、動かしたいウィンドウを見つけましょう。

また、ZinTweenでは「イージング」が設定されているので、そちらも一緒に記述してみます。

※イージング・・・動かす時に「だんだん早く」や「だんだん遅く」など、一定の速度ではない処理のこと。

this._windowLayer.children[3].ztXMoveTo(250,0.7).setEase(EaseType.EaseOutExpo);


ウィンドウの移動だけでなく、透明度の変更メソッドも存在します。また、イージングの種類もたくさんあるのでプラグインを覗いてみましょう。


イベントのスクリプトや項目位描写について説明しました。
どの処理に関しても、やはりJavaScriptを触らずしてクオリティの向上は無いと思います。

次回は戦闘中に呼び出したり、メモタグを上手く利用する方法を紹介したいと思います。

power spot. 2023/05/02 00:09

カスタムメニュープラグイン講座(第10回)「ツクール用の簡単なJavaScriptリファレンス2」

RPGツクールMZ向けのトリアコンタン氏のプラグイン「カスタムメニュープラグイン(SceneCustomMenu.js)」の使い方講座です。

リンク:
カスタムメニュー作成プラグインを調べてみた(とんびさん)
RPGツクールMZ プラグイン講座
RPGツクールVXAce & MV & MZスクリプトwikiとプラグイン

前回に続き、ツクールで使用する簡単なJavaScriptのリファレンスを紹介します。

筆者はJavaScriptを触り始めて1年程なのでまだまだ未熟なので、ご指摘などありましたら遠慮無くコメントして頂けると幸いです。


【1】JavaScriptのデータの型

JavaScriptに限らず、プログラムで扱うデータには「型」が存在します。
ツクール的に言うと、「スイッチ」と「変数」は型が違います。ゲーム用スイッチの設定値はON(true)、OFF(false)の2種類しか無いのに対し、ゲーム用の変数では数値、文字列、配列、オブジェクトなど様々なデータを格納出来ます。

RPGツクールMZ プラグイン講座

こちらでも紹介されている「型」を簡単にまとめます。

真偽値(true/false)Boolean型。true(真)かfalse(偽)の2種類のみ。ゲーム用スイッチのON・OFFと同じと思って良い。

数値Number型。数値を代入する。

文字列String型。文字を代入する。

配列Array型。配列データ型。ツクールの例…データベースのアクター($dataActors)、アイテム($dataItems)、スキル($dataSkills)、ゲーム内のパーティー($gameParty.members())、所持アイテム($gameParty.items())など。

オブジェクトObject型。オブジェクトデータ。ツクールの例…ゲーム内のアクター1、戦闘中のエネミー1、武器1など。


ツクールを使っている方は、真偽値(ゲーム用スイッチ)、数値・文字列(ゲーム用変数)のイメージは出来ると思います。配列とオブジェクトについて簡単に解説します。



配列のデータ構造は、電車の車両のような箱が順番に並んでいると考えてください。
1両目のデータは○○、2両目のデータは○○・・・というかんじでイメージしてみましょう。


ツクールの「ゲーム用変数」で具体的に考えてみます。
上の例で述べた「車両」にあたるものは、「変数ID」です。現在のバージョン最大数は5000個です。
ゲーム用変数を例えば20個用意したとします。20個の変数のうち、どこに何を入れるかはツクールのイベント入力で編集出来ます。このとき、変数には数値(Number)ではなく、他の型も入れることが出来ます。
配列のデータを扱う場合、上記の例で言うと「○○番目の車両のデータを呼び出してください」や「△△番目の車両のデータに数値□□を代入してください」という感じです。

次にオブジェクト型の説明です。配列は電車の車両のように「番号がついて」順番に並んでいました。オブジェクトは番号ではなく、名前がついた要素の構造になっています。

配列を電車の車両に例えましたが、オブジェクトは「電車に乗る人」にしてみましょう。
乗車する人Aが居たとします。そのAには名前、年齢、職業、電話番号、住所、着ている服、履いている靴・・・などがあります。それらをまとめて括っているデータが「オブジェクト型」です。配列は順番(数値)で管理しているのに対し、オブジェクトは名(文字列・パラメータ値)で管理します。「Aさんの名前を教えて」や「Aさんの履いている服を変更」という感じでデータを扱います。

なんとなくイメージが出来た所で、ツクールの例をあげてみましょう。


データベース・アクターは配列データです。そのアクター1人1人のデータはオブジェクトデータです。なので、「アクター1の名前を呼び出す」などが出来ます。


下の画像のようなイメージです。

具体的にコードを書くと、アクターのパラメータの1つに名前(name)があります。
データベースの配列から呼び出すためには以下のようなコードになります。

$dataActors[n].name //nはアクターのデータベース番号

【2】演算子

変数の値を計算するための「+」や「=」などの記号は演算子と呼ばれています。
よく使用するものを紹介します。

【算術演算子】
加算:「+」の記号を使用。足し算。
減算:「-」の記号を使用。引き算。
乗算:「*」の記号を使用。掛け算。
除算:「/」の記号を使用。割り算。
剰余:「%」の記号を使用。割り算の余り。

【代入演算子】
代入:「=」を使用。

【比較演算子】

A > B :AがBより大きい場合(同値は含めない)
A < B :AがBより小さい場合(同値は含めない)
A >= B :AがB以上の場合(同値も含める)
A <= B :AがB以下の場合(同値も含める)
A == B :AとBが同じ場合
A === B :AとBが同じ場合(データ方も一致する場合)
A !== B :AとBが同じでは無い場合


【3】変数の宣言

JavaScriptで扱うデータ(変数)は、「宣言」しないと使用出来ません。
「○○という名前の変数を使用します!」と命令しないと、データ(変数)が存在しないのでエラーが出ます。

変数の宣言は以下の2種類があります。

const
let

具体的な記述は以下の通りです。

const abc = "ABC";
let def = "DEF";

この場合、変数名「abc」と変数名「def」を宣言しています(宣言するときは初期値を「代入」する必要があります。)

では、constとletの違いは何なのでしょうか。
constは再代入不可の変数、letは再代入(変更)可能の変数です。【重要!】
ツクール的に言えば、ゲーム用変数はletの振る舞いをします。逆にconstのように再代入が不可能の場合、非常に扱いにくい変数になりますね。なぜこのような再代入不可の変数が存在するのかというと、メソッド内の処理で、変更しなくても良い変数を誤って破壊しないようにする措置です。
ツクールの例を言うと、アクターの装備を変更する処理をする場合、一度メソッド内にデータベースの装備品を取得する必要があります。このとき、constで変数を宣言せずにletで装備品を宣言した場合、処理を誤ってしまえばデータベース内のアイテムパラメータが破壊されかねません。constは再代入出来ないのでその心配はありません。
なので変数を宣言する場合は可能な限りconstで宣言するのが良いでしょう。

※varという、letに似た振る舞いの宣言がありますが、こちらは古い宣言の方法です。本講座ではvarは使用せず、letを使用していきます。


【4】条件分岐

ツクールのイベント「条件分岐」は、ツクール内でも使用頻度が高いイベントです。
スクリプト内でも頻繁に使用します。記述方法は以下のようになります。

if( abc > def ){
 //処理
};

ifのあとのカッコ内に条件を記述します。カッコ内で多様するのは比較演算子です。
上の例では、「変数abcが変数defより大きい場合に処理を実行」という意味です。
具体的に記述してみましょう。

ゲーム用スイッチ0001がONのとき、処理を実行 とする場合は

if($gameSwitches.value(1) === true){
 //処理
}

というかんじです。

【5】簡単なプラグインを作ってみる

比較演算子と条件分岐を照らし合わせて、ごく簡単なプラグインを作成してみます。

ツクールのプロジェクト内のフォルダ js 内にある rmmz_windows.js を開いてみましょう。
そこの2176行目付近にこういう記述があります。

Window_ItemList.prototype.maxCols = function() {
    return 2;
};

これはゲーム中のアイテムリストを表示した時の、リストの列数を設定しているメソッドです。return 2; となっている部分が、「アイテムリスト用ウィンドウの列数は2」という意味を持っています。

他のテキストファイルを用意し、この部分をコピー・ペーストします。
その後、講座1回目でも紹介したプラグイン導入をします。

【注意!】もとのスクリプトのファイルは変更しないようにしましょう!!

同じクラスとメソッドはオーバーライド(上書き)されます。それを踏まえて以下のように明記してみます。

Window_ItemList.prototype.maxCols = function() {
	if($gameSwitches.value(1) === true){
    	return 1;
     }else{
     	return 2;
     }
};

ソースコード

プラグインを導入(ファイル名はjidori_plugin.jsにしました)

if文におけるelseというのは、ツクールのイベントで言う「条件に当てはまらない場合」の処理です。

このコードでは、

ゲーム用スイッチ0001がONのときにアイテムリストの列数を1に、そうでなければ2にする

という処理をします。
実際にプレイして確認してみましょう。

話しかけている人は文章の表示と、スイッチ1のON/OFFの操作しかしていません。
列数がメニュー画面を開くと変わっていることが確認出来ます。


今回もカスタムメニュープラグインには触れませんでしたが、コードを書く上でどのようなデータ構造になっているかを理解していないと大きく躓くことになるでしょう。
記事の最初にあるリファレンスとコアスクリプト(ツクール標準のスクリプト)を少しずつでいいので読み解いていくのが良いと思います。

次回はメソッドをもう少し詳しく説明し、カスタムメニュープラグインの決定・キャンセルイベントの処理の例を紹介したいと思います。

power spot. 2023/04/20 23:10

カスタムメニュープラグイン講座(第9回)「ツクール用の簡単なJavaScriptリファレンス」

RPGツクールMZ向けのトリアコンタン氏のプラグイン「カスタムメニュープラグイン(SceneCustomMenu.js)」の使い方講座です。

リンク:
カスタムメニュー作成プラグインを調べてみた(とんびさん)
RPGツクールMZ プラグイン講座
RPGツクールVXAce & MV & MZスクリプトwikiとプラグイン

今回もメニュー作成講座を少し離れて、ツクールで使用する簡単なJavaScriptのリファレンスを紹介します。

筆者はJavaScriptを触り始めて1年程なのでまだまだ未熟なので、ご指摘などありましたら遠慮無くコメントして頂けると幸いです。


【1】ツクールとJavaScriptの関係

JavaScriptは、プログラム言語の1つです。昔からホームページに機能を持たせるために使われていましたが、近年ではJavaScript自体が高機能になったこともあり、汎用性が広がったようです。
RPGツクールMZ(MV)は、プロジェクト(ゲーム)の中身はJavaScriptで記述されています。なので、配布されているプラグインもJavaScriptで記述されています。
ツクールでの操作は、そのプロジェクト内のJavaScriptにデータを与えている、と考えるのが良いのかもしれません。言い換えれば、JavaScriptを理解していけば、作者の思った通りの動作が可能になると言っても過言ではありません。

世にあるさまざまなプラグインを拝見していると、とても多機能で使いやすく感銘を受けるものが多数存在します。
今回の講座では、JavaScriptでプラグインを自作・・・とまではいかなくても、記述を理解してプラグインを修正するぐらい出来るように情報を紹介したいと思います。

【2】JavaScriptを記述・修正するための準備

JavaScriptは、テキストファイルで記述してあります。拡張子は .js です。
テキストエディタがあれば、JavaScriptを記述・修正は可能です。が、普通のエディタ(Windowsのメモ帳、Macのテキストエディットなど)では、中身を見て記述や修正をすることは出来ても、とても見づらいです。
ではどんなエディタがいいのか? よく紹介されているのはMicrosoftのVisual Studio Codeです。

Download → ダウンロードページ(Microsoft)

インストールするとこのような画面になります。
通常のテキストエディタと違い、色分け、全体図の把握、タブ表示など様々な機能があります。


RPGツクールMZのデータをどのように管理されえているかを記述してあるリファレンスが存在します。ダウンロードして印刷し、すぐに見れるようにしておくと便利だと思います。

Download → RPGツクールMZ データベース用リファレンス

Download → RPGツクールMZ ゲームデータ用リファレンス

【3】これだけは必ず覚えてほしいこと

さてエディタの準備が整ったので、実際にJavaScriptを記述してみたいと思います。

ここでまず最初に紹介するコードが2つあります。alert()console.log()です。

alet()は、呼び出されたタイミングでポップアンプウィンドウが開きます。
ツクールのイベントコマンド「スクリプト」で「 alert(); 」と記述してみます。



このイベントを呼び出すと、以下の動画のようになります。

つまり、alert()はスクリプトを修正する上での修正箇所(タイミング)を発見するときに役立ちます。また、alert()のカッコの中身には変数名を記述して、その時点での変数の中身を表示出来たりしますが、それはまた別の機会に紹介したいと思います。

次にconsole.log()です。
ツクールMZではテストプレー中、F12キーを押すとコンソールウィンドウが開きます。


これはテストプレーでエラーが発生した時に、スクリプトのどの部分でエラーが発生したかを表示してくれたり、コードconsole.log()でログを呼び出したりするウィンドウです。
具体的に使用してみましょう。

先程のalert()を記述したイベントに、「 console.log(this); 」と記述しましょう。

実行すると以下の動画のようになります。

イベントに接触したところ、何やら上のウィンドウに表示されました。内容に関してはとりあえず触れませんが、console.logコードを記述すればalert()とは違い、コンソールウィンドウにログを表示してくれます。

以上、2つのコードは色々と調べる時に多用するので、必ず覚えておくようにしましょう。

【4】クラスとメソッド

ツクールのイベントを使いこなせている前提でJavaScriptのお話を進めます。
JavaScript(というよりは、オブジェクト指向型言語)には、クラスとメソッドという概念が存在します。

クラスをツクール的に言うと・・・ クラスというのはデータベースにおける「アクター」や「アイテム」、「スキル」などのいわゆるデータや、戦闘シーン、メニューシーンなど、すべての「くくり」はクラスで分けられていると考えて良いでしょう。

メソッドはクラスの中で扱う処理です。よくプログラムの解説などでは、メソッドは「道具・ツール」で例えられていたりしますが、その通りだと思います。ツクール的にざっくり言ってしまえば、メソッドはコモンイベントのようなイメージでいいかと思います。
ですが、コモンイベントは様々な場面で呼び出せますよね。実際のメソッドは、基本的には同じクラスの中でしか呼び出せません。

極端な例えで考えてみましょう。
戦闘シーン(Scene_Battleクラス)では、ゲームデータのセーブやロードの処理は出来るでしょうか? ツクールを扱っている方であれば、これは無理そうだなとわかるかと思います。つまり、クラスとメソッドはそういう関係です。雛形となるクラス(例での戦闘シーン:Scene_Battleクラス)で扱えるメソッドはそれに付随しているメソッドのみです。

メソッドの記述はすべて abc(); のように、メソッド名+カッコで記述されています。
変数名なのかメソッドなのか、最初は見分けがつかないかと思いますが、このカッコがあることでメソッドとなるので覚えておきましょう。

【5】簡単なメソッドを使ってみる

クラスやメソッドがわかったとこで一体何をどうすれば・・・ となってしまうかもしれませんが、具体的にコードを記述して色々と操作してみましょう。

ゲーム用の変数を操作してみます。
ゲーム用の変数は、上記のリファレンスから $gameVariables という変数で扱われています。
このときの $ は何なのでしょうか? これはグローバル変数と言って、クラスの垣根を超えてプログラム内のどこからでも呼び出せる大変便利な変数です。ツクールの変数は中身としてはグローバル変数なので、マップや戦闘シーンなど、どこでも呼び出して扱うことが出来ます。ただしプログラム的にはどこでも扱える=取り扱い注意となっているので、気をつけて使いましょう。

$gameVariablesの話に戻します。
ゲーム用の変数0001を参照するためにはどうすれば良いでしょうか。答えはリファレンスにも掲載されていますが(No.84)、$gameVariables.value()となっています。
リファレンスの説明には「n番目」の変数値を取得となっていますが、nの記述がありません。リファレンスの記述ミスかとおもいますので、次のように記述します。

$gameVariables.value(n); //n番目の変数値を取得

1番目の場合であれば、$gameVariables.value(1); となります。value(0001)とは記述しません。
では次に変数の操作をするにはどうすれば良いでしょう。リファレンスのNo.85には
$gameVariables.setValue(): n番目の変数値をvalueに設定
と記述されていますが、nとvalueがありません。こちらの場合は

$gameVariables.setValue(n, value) //n番目の変数にvalueを代入

となります。これはイベントコマンド「変数の操作」で「単独(n)、代入、オペランド:value」と同じです。

さてメソッドの説明では、メソッド名のあとにカッコがあることを説明しました。
この場合のメソッド名は value(n)、setValue(n,value) です。先に紹介した alert()やconsole.log()とは違い、カッコの中身が存在しますね。
これは引数と言って、値をメソッドに与えることにより戻ってくる値を変えているのです。

今日のまとめとして、イベントコマンド「スクリプト」に次のように記述してみましょう。

$gameVariables.setValue(1, 12345);
alert($gameVariables.value(1));

実行すると、以下の動画のようになりました。


カスタムメニュープラグインの中でもJavaScriptは多用します。
ツクール上でのプラグインパラメータを変更するだけでは限界がありますので、外部エディタなどで編集しながら記述をするのが良いかと思います。
次回はもう少し複雑なコードと演算子やデータの型などを紹介したいと思います。

power spot. 2023/03/18 22:21

カスタムメニュープラグイン講座(第8回)「各パラメータのリスト化」

RPGツクールMZ向けのトリアコンタン氏のプラグイン「カスタムメニュープラグイン(SceneCustomMenu.js)」の使い方講座です。

リンク:
カスタムメニュー作成プラグインを調べてみた(とんびさん)

今回は特にメニューを作成するわけではないですが、メニューで使用する各パラメータのリスト化を紹介したいと思います。


【1】「パラメータのリスト化」とは

カスタムメニュープラグインでは、ゲーム用のスイッチや変数、コモンイベント、スクリプトなど、設定項目が多く存在します。
メニューの規模はウィンドウの数に比例します。もちろんそれだけではありませんが、ウィンドウの数が多くなればなるほど設定項目が増え、作成者自身でも把握困難に陥ることは想像に難しく有りません。筆者も経験上、何度も確認をしました。そこでパラメータのリスト化をすることで、視覚的に簡単に確認出来ます。

リストは講座後半でダウンロード出来ます。

プリントして使用するか、Excelファイルに数値を入力するかして使用してください。
個人的にはプリントして使用する方が効率が良いと思います。

具体的な例ですが、拙作で作成したカスタムメニューの動画と、それ用のパラメータリスト(手書き)を掲載しておきます(Twitter)。

https://twitter.com/jidoripowerspot/status/1601230187093450754拙作のカスタムメニュー(鍛冶屋。武器・防具の製造と改造を処理)



https://twitter.com/jidoripowerspot/status/1628014461394235393手書きのパラメータリスト


【2】主なリスト化すべき内容

  • ウィンドウ識別子ID(Id
  • データスクリプト(DataScript
  • 【変数】インデックス格納変数(IndexVariableId
  • 【イベント】決定イベント(DecisionEvent
  • 【イベント】キャンセルイベント(CancelEvent
  • 【イベント】カーソルイベント(CursorEvent)
  • 【スイッチ】表示用スイッチID(VisibleSwitchId
  • 【スイッチ】再描画用スイッチID(RefreshSwitchId)
  • 【変数】選択項目格納変数(ItemVariableId

上記項目で、【イベント】系につきましては、呼び出すのがコモンイベントなのか、スクリプトで処理するのか、ウィンドウ偏移・スイッチ操作なのかによって内容が変わると思います。


【3】Excel及びPDFファイルのダウンロード

Excel用ファイルとPDFファイルを用意してあります。
Excelのシート1,PDFの1ページ目は【2】でリストアップした項目です。
Excelのシート2、PDFの2ページ目は各スイッチ、変数、コモンイベント用のリストです。

カスタムメニュープラグイン用.xlsx (16.88kB)

ダウンロード

カスタムメニュープラグイン用.pdf (28.89kB)

ダウンロード

カスタムメニューを作成するにあたって、設定するパラメータは多くなります。
整理してわかりやすくしておくことが要領よく作成することにつながると思います。

さて、次はイベントスクリプトについて解説したいのですが、その前にツクール用の簡単なJavaScriptリファレンスを紹介したいと思います。

« 1 2 3

月別アーカイブ

限定特典から探す

記事を検索