『RPGツクールMZ』[スクリプト]の応用
さて前回の『RPGツクールMZ』[スクリプト]の使い方基礎で、[スクリプト]イベントコマンドにスクリプトをコピペして、ちょっと改造するぐらいまでできるようになったと思います(なりましたよね!)
だいたい前回の内容を読んでコピペ&改造で『RPGツクールMZ』でのゲーム制作を半年ぐらいやってる想定で行きます。
というわけで今回はさらに推し進めて、より応用力の高い使い方ができるようになることを目指します。
スクリプトでできることは千差万別ですが、定番の書式みたいなものはあります。
その辺覚えて使いまわし、さらに改造のバリエーションを増やして行きまっしょい!
主に[スクリプト]イベントコマンドで使うことを想定していますが、他のコマンドでの使い方もちょこちょこ出てきます。
例によって適宜RPGツクールMZ 非公式 JavaScriptリファレンスにリンクしていきます。
用語
…この説明で伝わるとは到底思えませんが、どーしても用語使っちゃうので、いきなり出てきてびっくりしない程度にはなっててもらおうかなと。
半年[スクリプト]を使ってる(という想定な)んで、なんとなくは理解していると思います。
ざっと見て飛ばしていいです。用語が気になったら確認してください。多分よくわからないと思います(ひどい)
配列…値に番号をつけて並べた値。例:[ 10, 4, 6 ]
(これは値として数字を並べていますが他の値も並べられます)
添字…「そえじ」配列(を保持している変数)から値を取り出す際に使う数字。例:array[ 0 ]
( JavaScript の配列の添字は 0 から始まります)
文字列…文字を並べた値です。JavaScript 的には String
です。値が文字1つに固定された配列と考えてもいいです。例: "文字列でーす"
真偽値…真(正・ON)と偽(負・OFF)の2つを取る値です。JavaScript 的には Boolean
で2つの値は true
と false
で表されます。
論理演算…計算の結果として真偽値を返す演算です。値の多少を判定する条件式などが含まれます。
変数…値を保持しています。JavaScript の変数も『RPGツクールMZ』の変数とだいたい同じです。定義例:let variable;
以前は定義に let
ではなく var
を使っていましたが問題が多く、今(2022年現在)はあまり使われていません。逆に var
が使われていると素人でも簡単に古いコードだと分かります。なお『RPGツクールMZ』になってコアスクリプトは var
を廃止してます。
定数…変数とだいたい同じですが、一度値を設定したら変更できません。一見不便に感じますが、実は変数より便利で、実際のプログラミングでは、ほとんど変数を使う必要はありません。定義例:const constant = 1;
関数…処理をまとめたものです。『RPGツクールMZ』の[コモンイベント]とだいたい同じですが、引数と返り値があるので使い勝手が格段に良いです。また[スクリプト]イベントコマンドも複数の処理が書けるので一種の関数といえ、[変数の操作]にある[スクリプト]などには返り値があります。JavaScript は歴史的経緯があって関数の定義方法がたくさんあるのが困ったところです。定義例:function addOne( arg ) { return arg +1; };
、const addOne = arg => arg + 1;
引数…「ひきすう」は関数の実行の際に ()
内に書いて渡す値。関数には引数がない場合も複数ある場合もあります。
返り値…「かえりち」関数が返す値です。関数によってあったりなかったりします。
オブジェクト…関係する値(プロパティ)と機能(メソッド)をまとめたもの。JavaScript のプログラムはこれを組み合わせてできてます。
プロパティ…オブジェクトに付随した変数です。ただし変数と違ってオブジェクトの状態で値が変わるものもあります。逆に設定することでオブジェクトの他のプロパティなどの状態が変わる場合もあります。オブジェクトに .
をつけた後に指定します。例:object.property
リードオンリープロパティ…オブジェクトに付随した読み取り専用の値です。ただし定数と違ってオブジェクトの状態で値が変わるものもあります。read only は ro とか r/o とか略されます。
メソッド…オブジェクトに付随した関数です。だいたいはプロパティを加工します。オブジェクトに .
をつけた後に指定し、()
の中で引数を指定します。例:object.method()
値の操作
通常のイベントコマンドで変数やスイッチに値を設定して、その値を[スクリプト]コマンドで使うことで、関数のような引数を再現できます。
そして値を変数やスイッチに設定することで返り値を再現できます。
『RPGツクールMZ』は値の変更によって[イベント]の状態である[EVページ]を切り替えることが重要な制御法なので、そういう意味でも値の変更は重要な処理です。
また[イベントコマンド]では変数を使って値を設定できない場合も多いですが、[スクリプトjで[イベントコマンド]と同等の処理を行い取得した変数を割り当てることもできます。
夢が広がりますね!値の設定関連の JavaScript しっかり使えるようになりましょう!
ところで、スクリプトとの値の受け渡しにはID1の変数・スイッチを使うことをオススメします。
というのもいろんなイベントコマンドで変数・スイッチのIDの初期値が1なので、とくに指定しなくてもそのまま使えるからです。
ちなみに個人的にはID1の変数・スイッチの名前は it
にしてます。Macユーザならみんな知ってる HyperTalk のノリです(AppleScript的には result
です)
変数の操作
値と操作 | スクリプト |
---|---|
変数1へ10を代入 | $gameVariables.setValue( 1, 10 ) |
変数1から取り出し | $gameVariables.value( 1 ) |
リファレンス:Game_Variables.setValue()
リファレンス:Game_Variables.value()
以下[イベントコマンド]を[テキストとしてコピー]したものなので、[スクリプト]に貼り付けるなら JavaScript の頭にある : から前の部分は削除してください。
◆変数の操作:#0001 = 12
◆スクリプト:const arg = $gameVariables.value( 1 );
: :const result = Math.random() * arg;
: :$gameVariables.setValue( 2, result );
この場合は直前の[変数の操作]で変数ID1に代入した 12
が変数 arg
にまた代入されています。これが引数にあたります。
そして乱数 Math.random()
を arg
で乗算した値を result
に代入し、変数ID2に返しています。
この変数ID2が返り値にあたります。
ちなみに、スクリプトは次のように書いても構いません。
$gameVariables.setValue( 2, Math.random() * $gameVariables.value( 1 ) );
このくらいなら、さほど読みづらくはありませんが、複雑になってきたら定数に代入してから使った方が読みやすくなります。
<Nice!>変数は[変数の操作]のところに[スクリプト]があるので、その場合は返り値の操作は必要ありません。
◆変数の操作:#0001 = 12
◆変数の操作:#0002 = Math.random() * $gameVariables.value( 1 );
これだけ見ると最初に変数ID1に入れて直後に取り出しているので、さほど意味はありませんが、スクリプト部分が[コモンイベント]だとすると、その便利さがわかると思います。
1つの[コモンイベント]でも事前に変数に様々な値を入れることで、それに応じた処理ができるので、たくさんの[コモンイベント]を作る必要がないのです。
スイッチの操作
値と操作 | スクリプト |
---|---|
スイッチ1のON | $gameSwitches.setValue( 1, true ) |
スイッチ1のOFF | $gameSwitches.setValue( 1, false ) |
スイッチ1から取り出し | $gameSwitches.value( 1 ) |
リファレンス:Game_Switches.setValue()
リファレンス:Game_Switches.value()
リファレンスで → の後ろに書いてあるのが Boolean
の場合、スイッチに設定できます。
リファレンス:Game_Party.inBattle()
他、論理演算(数値の比較など)の結果もスイッチに設定できます。
<Bad!>[スイッチの操作]には[スクリプト]がありません。
[条件分岐]の[スクリプト]を使い、分岐にONとOFFの[スイッチの操作]を置くことで、行数はかかりますが、一応スクリプトの結果をスイッチに入れる操作はできます。
例えば、以下のようにすれば戦闘中かどうかでON・OFFを分けてスイッチを設定できます。
◆条件分岐:スクリプト:$gameParty.inBattle();
◆スイッチの操作:#0001 it = ON
◆
:それ以外のとき
◆スイッチの操作:#0001 it = OFF
◆
:分岐終了
が…冗長ですよね。
[スクリプト]イベントコマンドを使い、返り値を代入するスイッチを JavaScript を使って指定す方がスッキリするかと思います。
◆スクリプト:$gameSwitches.setValue( 1, $gameParty.inBattle() );
セルフスイッチの操作
値と操作 | スクリプト |
---|---|
マップID2でイベントID3のセルフスイッチのON | $gameSelfSwitches.setValue( [ 2, 3, "A" ], true ) |
マップID2でイベントID3のセルフスイッチのOFF | $gameSelfSwitches.setValue( [ 2, 3, "A" ], false ) |
マップID2でイベントID3のセルフスイッチから取り出し | $gameSelfSwitches.value( [ 2, 3, "A" ] ) |
リファレンス:Game_SelfSwitches.setValue()
リファレンス:Game_SelfSwitches.value()
セルフスイッチの [ ]
の部分は、[ マップID, イベントID, タイプ ] と順に書いたものです。タイプは "
で囲うのを忘れずに!
リファレンス:MV.SelfSwitch
イベントコマンドではセルフスイッチはその名の通り自身のものしか設定できませんが、[スクリプト]だと別のイベントはもちろん、別のマップのイベントも指定できる上に、タイプに制限がなく "A"、"B"、"C"、"D"〜"Z" どころか、"wait" みたいな任意の文字列が指定できます。
タイプに日本語を指定するのは…動くんですけど個人的には若干不安があります。多分大丈夫とは思うんですが。
値全体の操作
ゲームオーバーからの再トライをする際、タイトルまで戻せば初期化はされるのですが、プレイ感が損なわれるのが困ります。
そういう場合に便利な、値全体を初期化する方法を紹介します。
値と操作 | スクリプト |
---|---|
スイッチ初期化 | $gameSwitches.clear(); |
変数初期化 | $gameVariables.clear(); |
セルフスイッチ初期化 | $gameSelfSwitches.clear(); |
全アイテムを初期化 | $gameParty.initAllItems(); |
全メンバーのスキルを初期化 | $gameParty.allMembers().forEach( e => e.initSkills() ); |
他にも初期化が必要なものがある気がしますが、[全回復]イベントコマンドとか使えばいけると思います。
初期化方法がわからないとかあったら、コメントにどーぞ。
範囲指定での値の設定は、あとで紹介します。
イベントコマンドでの変数の加算操作
[変数の操作]で[変数]単独:2、[操作]加算、[オペランド]定数:10を指定した場合と同じ[スクリプト]イベントコマンドは次のように書けます。
$gameVariables.setValue( 2, $gameVariables.value( 2 ) + 10 );
めんどくせ…普通に[変数の操作]イベントコマンドでやればよくね?って話ですが、これは今後応用するにあたって、イベントコマンドと同じものをどう書くかわかっていた方がいいと思ってですねー。
加算のほかにももちろん [変数の操作]にある、減算 -
、乗算 *
、除算 /
、剰余(除算の余り) %
は使えますし、JavaScript ならさらに複雑な計算式も使用できます。
より複雑な処理になるとイベントコマンドよりスクリプトで書いた方がずっとスッキリする場合が増えてきます。
四則演算に加え JavaScript の Math
オブジェクトには先に紹介した random()
など多くのメソッドがあり『RPGツクールMZ』でも活用できます。
変数の操作での加算操作
[変数の操作]で[変数]単独:2、[操作]代入、[オペランド]スクリプトを選んだ場合、先ほどの[スクリプト]と同じ動作をするスクリプトは次のようにかけます。
$gameVariables.value( 2 ) + 10
代入操作がないので、かなり短くなりました。
これはそもそも最初に書いたように、[変数の操作]の基本機能でできる操作なので、[スクリプト]を使う必要はありませんが、[変数の操作]で取得できない値は多いので応用が効く書き方です。
すでにスクリプトをコピペすることで、そのような使い方には慣れていると思いますが、簡単に復習しておきました。
変数の操作での加算
[変数の操作]で[変数]単独:2、[操作]加算、[オペランド]スクリプトを選んだ場合、先ほどと同じ動作をするスクリプトは次のようにかけます。
10
流石に10なら[スクリプト]を使う意味はないですが、要は[変数の操作]を使ったり[操作]を適切に選択すれば、かなり短くできるという例です。
意外とコマンド側で設定しておけば短く書けるのに[スクリプト]の方でごり押しして複雑化していることありますので、極力標準の機能を活用していきましょう!
JavaScript定数による分割
さて先ほどからひねり回している、このスクリプトですが、見ての通り変数の操作は、やりたいことに対して記述が長く、読みづらくなりがちです。
$gameVariables.setValue( 2, $gameVariables.value( 2 ) + 10 );
前にも書いたように、いったん( const で定義した )定数に値を代入してスクリプトを分割するといいでしょう。
const id = 2;
const prev = $gameVariables.value( id );
$gameVariables.setValue( id, prev + 10 );
余計長くなっとるやんけー!と思う人も多いと思いますが、実質の処理である3行目だけ見るとかなりスッキリしています。
理解に9の労力がかかるものを一度にやるより、不思議なことに4の労力のものを3回やる方が、全体の理解にかかるコストが下がるのが人間です。
この「要素の分解」はプログラミングにおいて基本的な考え方です。こまめに分けましょう。
また定数を使っておいたほうが、後々の修正やスクリプトが長くなった時など、何かと便利です。
イベントコマンドの[スクリプト]に書ける行数は大してないので、スクリプトが長くなった時というのは、実質プラグイン化した時を意味します。
区間判定をJavaScriptで行う
[条件判定]でA〜Bの間という判定を行いたいことはよくありますが…できません 。少なくとも単独では。
と思ってたでしょう!できます!JavaScript を使えば!!
[条件判定]-[スクリプト]にこうです。
3 <= $gameVariables.value( 5 ) && $gameVariables.value( 5 ) <= 10;
これで「変数ID5 が 3〜10 の間」という意味になります。
( v => 3 <= v && v <= 10 )( $gameVariables.value( 5 ) );
同じ判定をしますが、この書き方だと変数IDを書き換える場合に一箇所で済むのでちょっと楽です。
=>
とか <=
とか似たような記号がたくさんあって、詳しい内容を説明するとややこしいのですが「短く書けるし、いいじゃん!」ぐらいのノリでどーぞ。
豆知識
ある程度 JavaScript が分かっている人向けに説明すると、これは即時関数です。
( v => 3 <= v && v <= 10 )( $gameVariables.value( 5 ) );
前半のカッコで(アロー)関数を生成していて、後半のカッコは関数に引数を与えて実行しています。
v
が引数なので、定数の定義( const v
)が不要というのが楽なポイントです。
正確にいうと引数は定数ではなくて変数なんですが、引数は定数と思って使った方がプログラムの質は良くなる、と業界では言われています(どこの?)
アロー関数を使わずに function
で関数を定義して書くと、次のようになります。
( function( v ){ return 3 <= v && v <= 10 } )( $gameVariables.value( 5 ) );
お好きなやつでどーぞ!
識別子について
定数や変数、関数などの名前(識別子)は a
、b
、c
みたいな1文字のものや省略しすぎたものなど、内容がわからない名前は避けましょう。
<Bad!>正直いうと僕は『RPGツクールMZ』の[計算式]に使われる a
と b
がどっちがどっちなのか覚えてなくて、というか覚えるの無理じゃないですかあんなの?
なお b
の代わりに target
も(非公式ですが)使えるので target
を使った方がコード的には圧倒的に見やすくなるんですが…[計算式]の入力フィールドが狭くて、結局見やすくはないという…。
とくに人に見せるものではないなら、作りやすいのが一番。
とはいえ、「要素」element
の略で e
程度の意味は最低限必要です。
「一時的」temporary
の略で tmp
、また「番号」index
の略として i
、 height
の h
、width
の w
などはプログラム一般に使われがちな略字の変数なので、そういうよく使われている意味から外れた使い方は避けた方がいいでしょう。
あと、引数として書くけど使わないものは識別子に _
を使うのが定番化しています。
結論: バシバシ英語の辞書を引け!!(そしてコピペして使え)
範囲指定
変数の操作に限らず、ある番号からある番号まで全部に操作を行いたい、ということはよくあります。
[スイッチの操作]や[変数の操作]イベントコマンドにも範囲指定は用意されています。
1〜4までのスイッチを設定する場合、単純に考えると次のように書きますよね。
$gameSwitches.setValue( 1, true );
$gameSwitches.setValue( 2, true );
$gameSwitches.setValue( 3, true );
$gameSwitches.setValue( 4, true );
まぁ…これでもいいんですが、そういう時に JavaScript では繰り返し用の機能が用意されています。
以下「この例を見て改造できるのかなー、できたらむしろすごくね?」とか思いつつ書いてます。はっはっはー。
「コピペしてそれっぽい数値を書き換える」を基本姿勢に!
なお、以下の例は JavaScriptコンソールで実行可能なので、改造・実行しては[F9]のデバッグ画面で結果を確認する、みたいな感じで慣れていくといいと思います。
デバッグ画面を表示したままでスクリプトを実行して、デバッグ画面を操作して表示を変えれば再描画されるので、簡単に結果を確認できます。
あ、書き換えるスイッチは事前に『RPGツクールMZ』のエディタの方で作っておいてください。
スイッチ1から4までをON
[スイッチの操作]で[スイッチ]範囲:1〜4、[操作]ONを指定した場合と同じスクリプトは次のように書けます。
for( let i = 1; i < 5; i++ ) $gameSwitches.setValue( i, true );
forの後ろのカッコの中は ;
省略不可です。
設定する数値が 4 までなのにスクリプトに書いてある数値が 5 なのが、ちょっと気持ち悪いかもしれませんが、そーゆーものです。
詳しくは for - JavaScript | MDN を読んでください(丸投げ)
for( let i = 1; i <= 4; i++ ) $gameSwitches.setValue( i, true );
このように =
を追加して <=
と書く方法もあります。この辺はお好みで。
ちなみに =<
と逆には書けません。必ず =
が後にきます。
1〜4のうち3を除きON
for( let i = 1; i < 5; i++ ) if( i !== 3 ) $gameSwitches.setValue( i, true );
先ほどのスクリプトに if( i !== 3 )
が挟まった形です。
1〜4のうち2をOFF他をON
for( let i = 1; i < 5; i++ ) $gameSwitches.setValue( i, i !== 2 );
true
の部分に論理演算(条件式)を書きました。
前述した通り、論理演算の結果は真偽値になるので、スイッチに代入できます。
連番でない指定スイッチをON
連続してない場合はどうするのでしょう?諦めてベタに並べていくしかないのでしょうか。
こうします。
[ 2, 9, 14, 21 ].forEach( i => $gameSwitches.setValue( i, true ) );
これで、最初に並んでいる番号のスイッチに対して ON を実行します。
このforEach
という奴は、先ほどのfor
とどう違うのかとかいう話は結構ややこしくなるので…細かいこたぁ気にすんな、の精神でお願いします。
この配列(行頭にある []
の部分)を使った処理について書くだけて、このページの分量を遥かに超えること間違いなしです。
詳しくは以下リンク先を読んでください(丸投げ)
Array - JavaScript | MDN
画面上のキャラの指定
変数・スイッチ・セルフスイッチに続いて画面に表示されるキャラクターの指定方法を見て行きます。
いつでも
以下のものは $
から始まる大域変数を使っているので、どの場所でも常に同じ書き方ができます。
キャラ | スクリプト |
---|---|
プレイヤー | $gamePlayer |
隊列メンバー0 | $gamePlayer.followers().follower( 0 ) |
隊列メンバー1 | $gamePlayer.followers().follower( 1 ) |
隊列メンバー2 | $gamePlayer.followers().follower( 2 ) |
小型船 | $gameMap.boat() |
大型船 | $gameMap.ship() |
飛行船 | $gameMap.airship() |
イベント | $gameMap.event( 1 ) |
イベントコマンド
[スクリプト]イベントコマンドだと、キャラを指定するのに character()メソッドが利用できます。
キャラ | スクリプト |
---|---|
プレイヤー | this.character( -1 ) |
このイベント | this.character( 0 ) |
その他イベント | this.character( 1 ) |
移動ルート
移動ルートの[スクリプト]移動コマンドだと[対象のキャラクター]を this
で指定できます。
キャラ | スクリプト |
---|---|
対象のキャラクター | this |
アクターの指定
画面上のキャラを指定して、その能力値などのパラメータを調べようと思っても、パラメータを持っているのはアクターなので、画面上のキャラからは取れません。
そんなわけで、アクターの指定方法を紹介します。
アクターオブジェクトとアクターデータ
一言にアクターといっても『RPGツクールMZ』が扱うのは次の2つがあります。
ゲーム内で使いやすいようにデータを扱う機能を持った、アクターオブジェクト。
装備やHPなど変更される値の現在値と、アクターに関連する機能を持っています。
リファレンス:Game_Actor
[データベース]-[アクター]で入力した値を保持するための、アクターのデータベース。
"data/" フォルダにある "Actors.json" ファイルの中身そのものと言っていいでしょう。
データベースにはプロパティのみ存在し、メソッドはありません。
リファレンス:RPG.Actor
IDでアクターを指定
アクターIDがわかっている場合、たとえばIDが 1 の場合は次のように書けます。
$gameActors.actor( 1 )
$gameActors
はアクターをまとめて扱うためのオブジェクトです。
リファレンス:Game_Actors
メンバーからアクターを指定
アクターIDじゃなくて現在のプレイヤーやパーティーメンバーのアクターデータが欲しい場合。
$gameParty
大域変数を使います。
リファレンス:Game_Party
キャラ | スクリプト |
---|---|
リーダー(プレイヤー) | $gameParty.leader() |
メンバー0 | $gameParty.allMembers()[ 0 ] |
メンバー0とリーダーは同じです。
他にも死んでいるメンバーだけ取り出す deadMembers()
とか、戦闘メンバーだけ取り出す battleMembers()
とか色々とあります。
指定したメンバーが存在しないときは undefined
が返ってきます。
メンバーからアクターIDを取得
[変数の操作]-[ゲームデータ]-[パーティ]でメンバーを指定して変数にアクターIDを設定できます。
なので、それだけが目的なら別に JavaScript を使うことはないのですが、[スクリプト]の中でメンバーからアクターIDを取得し「それを次の行で使いたい」ということもあるのです。
const actorId = $gameParty._actors[ 0 ];
先頭キャラのアクターIDとか $gamePlayer
が持ってそうですが、意外に持ってません。
『RPGツクールMZ』のコアスクリプトは「ここにあるだろう」と目星をつけたところに目当ての値がないことが多いのですが、イベントコマンドでの書き方を見ると、ある程度は存在箇所を予想可能です。
IDでアクターのデータベースを指定
アクターIDがわかっている場合、たとえばIDが 1 の場合は次のように書けます。
$dataActors[ 1 ]
得られたデータベースのオブジェクトに存在するプロパティはリファレンスをご覧ください。
リファレンス:RPG.Actor
アクターオブジェクトからアクターデータを指定
大抵の値は $dataActors
から取った方が早いと思いますが、アクターIDがわからないけどアクター自体は、メンバーから指定できるとき。
アクターオブジェクトからアクターデータを得るには次のように末尾に .actor()
を追加します。
$gameParty.allMembers()[ 0 ].actor()
メタデータ
[データベース]などで設定できるデータのメモ欄も[スクリプト]から取得できます。
だいたい $dateXxxx
系の大域変数から辿ったデータは持ってます(当たり前ですがメモ欄があるものはデータを持ってます)
たとえば $dataEnemies[2].note
とこんな感じで、簡単に敵キャラID2のノートの内容が取れます。
プラグインをよく使っているなら、メモ欄にメタデータを書き込んだことがあるかと思います。
<メタ:内容>
あれ別にプラグイン専用の値ではないので$dataEnemies[2].meta
で取れます。
メタタグごとの値は$dataEnemies[2].meta.メタ
みたいにやると取れます。
プログラム部分での日本語表記は若干不安があるので $dataEnemies[2].meta[ "メタ" ]
と書いた方がいいかもしれません。
どちらの書き方でも同じ値が取れます。
const metaList = $dataEnemies.filter( e => e && e.meta[ "メタ" ] );
$gameVariables.setValue( 1, metaList );
こんな感じにすると、<メタ>
が書き込んである敵をフィルタした配列を引き出せます。
ツクールの変数に入れているので、この後イベントコマンドを使って処理できます。
豆知識
メタデータに限った話ではないですが、ちょっとこの部分の書き方がわかりにくいので解説します。
e && e.meta[ "メタ" ]
まず e
には $dataEnemies
に含まれる値の1つが順に入ってくるんですが、値が存在しない場合もあります。
その場合に e &&
をつけておくと &&
の後ろの部分は処理されません。
この仕組みは、論理演算のショートサーキットなどと呼ばれます。
で JavaScript の場合は返り値として、そこに書いてある値がそのまま返されます。
ここでは e
が null
などの false
判定される値の場合、e
の値が返ってきます。
次に e
が true
判定される…つまりここでは、配列にオブジェクトが入っている場合。
&&
の後ろにある e.meta[ "メタ" ]
がチェックされます。
メモ欄に <メタ>
があるなら true
なければ undefined
が返ってくるので、それによって配列の値が選別され、<メタ>
が書いてある値のみの配列が帰ってくる、という寸法です。
ここまで複雑なことを理解してないと使えないのを「ただ短く書きたい」という理由で使ってくるの、有り体に言ってプログラマっておかしな人種ですが…。
変に短くするより、わかりやすく書いた方がいいですよ(誰となく)
ピクチャ
個人的にはピクチャをあまり使ったことないので、どのくらい役に立つのかよくわかんないのですが。
ピクチャ使う人多いので、基本だけ書いておきます。まずピクチャの指定方法。
ピクチャ | スクリプト |
---|---|
ピクチャID1 | $gameScreen.picture( 1 ) |
全ピクチャの消去
$gameScreen.clearPictures();
ピクチャの5〜9範囲消去
for( let i = 5; i < 10; i++ ) $gameScreen.erasePicture( i );
なんか見たことありますね。そう変数の応用で、ピクチャの消去もできるんです。
$gameSwitches.setValue( i, true )
を $gameScreen.erasePicture( i )
に変えるだけです。
なので、他の書き方は省略します。
その他何ができるか詳しくは、リンク先のリファレンスをどーぞ。
リファレンス:Game_Screen
リファレンス:Game_Picture
終わりに
というわけで、ざーっとスクリプトの応用を紹介しました。
この辺から先になると、個別のゲームに必要なスクリプトは千差万別でしょうから、もうただの JavaScript の解説になりそうです。
アクターやピクチャに限らず大域変数は $gameXxxx
系はオブジェクトで $dateXxxx
系はデータベースという区分けになっています。
リファレンス: 大域(グローバル)変数の一覧 からそれっぽいものを探してリンクを追っていけば、ある程度は使えるんじゃないかと思います。
とはいえ、RPGツクールMZ 非公式 JavaScriptリファレンスの読み方、みたいなのは書いた方がいいかなーとは思ってます。
僕も思ってるんですよ「まず JavaScript わかってないと読み方わからんやろ、これ」って。
そう思ってるもんを気軽に紹介すんなよ、って話はあるんですが、他に適当なものもないので。
そんなわけで『RPGツクールMZ』で始めるJavaScript入門という記事を書きました。
これで大まかなリファレンスの読み方はわかるようになると思います。なるといいなぁ。
レッツエンジョイ ツクールライフ!
Discussion