RPGツクールと数学のブログ

RPGツクールと数学についてのブログです。

ピクチャ主体のゲーム作成ツール(基礎編2/6)(RPGツクールMZ)

ピクチャを追加してみる

前回の記事で、画面上にピクチャを一つ表示して、それを動かすことが出来るようになりました。今回は、ピクチャを追加します。

ピクチャはイベントに対応するので、イベントを追加すれば良いですね。ただ、前回のような書き方でイベントを追加してエントリーポイントに何か書けばいいのではと思われるでしょうが、このツールは基本的に、エントリーポイントで指定するイベントは一種類だけとすることを想定しています。イベントが増える度にエントリーポイントを書き換えていってはタイヘンですからね*1

以下のように、イベントをまばらな配置とするのではなく、関係性を持たせるように作ることを理想としています。この図の意味は後述していきます。

イメージとしては、開始点となるイベントは一つに決めて、そのイベントから別のイベントが開始して、という繰り返しとなるように作るのです。要はイベント同士に子弟関係があるのですね。これを、赤いひし形の矢印を使って表現します。タイルセット「クラス図」に矢印のチップがあるので、図はそれを使って作成します。

イベント2つを赤いひし形の矢印で繋ぐと、AのイベントがBのイベントを管理するという意味になり、このような関係を集約と呼びます。BはAに集約されているといいます。これを使って、前回の記事で作成したピクチャから、別のピクチャを生成してみましょう。

まず、前回作成したピクチャの隣に、新しいイベントを配置します。

イベント名は「ハネ」とします。先頭に★はつけません。★はエントリーポイントから呼び出すものだけに付けて、その他には付ける必要がないです。

イベント実行内容は、また注釈と初期化命令を入れます。注釈は「(x, y)」としてください。

そして、プラグインコマンド「PopManager」の「初期化」を選んで、以下の引数だけを変えます。

  • this.filename ⇒ 「sample/feather」
  • this.x ⇒ 「x」
  • this.y ⇒ 「y」
  • this.scaleX ⇒ 「60」
  • this.scaleY ⇒ 「60」
  • this.divX ⇒ 「4」
  • this.angle ⇒ 「120」

これで初期化の処理は完成です。これはあくまでハネが生成されたタイミングでどう初期化されるかという内容の記述に過ぎないので、これだけではまだハネは生成されません。

前回は注釈のかっこの中身を空にしていましたが、今回は(x, y)のように、「,」区切りでxとyという2つの文字を入れていますね。これもあとで解説します。

次に2ページ目に更新処理を作成します。一行目に注釈「更新」を入れて、スクリプトに以下を入力します。「this.x」とはピクチャのx座標、「this.y」とはピクチャのy座標を表します。「-=」は、減算という意味です。更新のたびにx座標が3.5減算、y座標が2減算されるということで、位置が左上の方へ行くという意味です。

this.x -= 3.5;

this.y -= 2;

JavaScriptは、処理の末尾に必ず「;」を付けるものとなっています。*2「;」は、処理のある行なんだな、ぐらいに捉えてください。

次に、イベント同士を集約の矢印でつなぎます。タイルセットで直接描いてください。ひし形がくっついている方(管理する側)が「★ベイ助」に、くっついていない方(管理される側)が「ハネ」になるようにします。

そして、「★ベイ助」の2ページ目に以下のスクリプトを追加します。これは、一定時間おきにハネを追加するという意味です。

if (this.t % 30 == 0) {

    this.list.push(new ハネ(this.x, this.y));

}

上記の例ではイベント命令の「スクリプト」が2つに分かれていますが、2つに分けれていても、1つにまとめて書いても、意味としては全く同じになりますので、わかりやすい書き方で書いてください。*3

これでテストプレイしてみると、このように、ベイ助から一定時間おきにハネが出てくるような画面が表示されると思います。

ハネのイベントは1つしか作成していないのに、どうしてたくさんハネが出てくるようになってるかというと、このツールを介したイベントは実はピクチャの実体そのものを表しているのではなくて、ピクチャの設計図を表しているからになります。ベイ助のイベントに追加したスクリプトでハネを生成する処理を入れましたが、ハネのイベントを設計図として、生成処理のタイミングで実体がどんどん生成されるということになっています。

普通のイベントは設計図とかではなく実体を表すものなので、ややこしいところかもしれません。ただ、設計図とすることで、このように同じ種類のピクチャを大量に出すことができるので、ピクチャが多用されるゲームでは便利なのです。

生成処理のスクリプトはよく使うので、ここの解説をしておきます。

if (this.t % 30 == 0) {

    this.list.push(new ハネ(this.x, this.y));

}

まずは外側が、ifから始まるもののかっこで覆われている構造をしています。これはif文といって、条件分岐と同じはたらきをします。文法は以下です。

if (【条件】) {

    【処理】;

}

条件の部分にある「this.t」は、自分が生成されてからの時間です。単位はフレームで、60フレームでぴったり1秒になります。「this.t % 30 == 0」と書くと、「30フレームに一度だけ」という意味で、つまり0.5秒に一回処理が行われることを表します。

if文の中の処理を確認します。

this.list.push(new ハネ(this.x, this.y));

これは、まず外側で管理対象を追加する処理が書かれています。文法は以下です。

this.list.push(【新しく管理するピクチャ】);

具体的にどんなピクチャかというと、かっこの中身です。

new ハネ(this.x, this.y)

newとついてますが、さっきも書いたように、イベントは「ピクチャの設計図」です。設計図をもとに生成するときに、newを使った生成処理を書きます。文法は以下です。

new 【設計図となるイベント名】(【初期化処理で使う引数】)

ハネイベントを設計図としてハネを作りたいので、まずnew ハネと書きます。ただ、そのハネはベイ助が今いるところに生成したいので、ここに生成したいという情報を、かっこの中に書いているのです。(this.x, this.y)の部分ですね。

this.xは自分のx座標、すなわちベイ助のx座標です。this.yはベイ助のy座標です。

ハネイベントの注釈で(x, y)と書いたのは、newをするときに指定した値で、以降に登場するxとyをそれぞれ置換するという意味です。これを引数と呼びます。

ちょっと複雑なので、図を使ってイメージしてみてください。例えばベイ助の座標がx=300, y=200だったら、ハネの初期化処理に書いたx, yが300, 200に置換されるので、ハネの座標もx=300, y=200になります。

これで、ピクチャからピクチャを呼び出すことができました。この記事のまとめです。

  • エントリーポイントには基本的に一つのイベントしか指定しない。
  • その代わり、イベントとイベントの間に集約の関係を作っておき、あるイベントから別のイベントを生成できる仕組みにしておく。
  • 生成するときはnewを使う。引数を設定しておけば、どう初期化するのかを細かく設定することができる。

次回からいよいよ実用編です。ベイ助のご利益羽根つきの簡易版を作ってみましょう。

 

次の記事へ

前の記事へ

TOPに戻る

*1:もちろん何種類も呼び出すやり方でも作れはするのですが、あまり本ツールの恩恵を得られません。

*2:省略しても大丈夫なように解釈されることもあります。

*3:これに対して、本ツールを使用しない通常のイベント命令では、スクリプトを分けると意味が変わる場合があります。注意してください。