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