【MV講座】イベントとジェネレーター

はいどーも始まりましたニート講座です。
社会人は高慢ちきなクソ野郎ばかりで嫌いなので回れ右してくださいねー。

あっ、嘘です。
社会人様の血税でナマポ受給するのでよろしくお願いします。

イベントとジェネレーター

ニート冗句はさておき、今回のMV講座はイベントとジェネレーターです。
イベントと言ってもマップのイベントではありませんし、顔グラとか作るジェネレーターの話でもありません。
プラグインを作成するときに便利なイベントとジェネレーターです。
いや言うほど便利じゃないかもしれませんが、知ってるとどこかで使いみちがあるかもしれないので作っていこうと思います。

完成品

とりあえず完成品を貼っておきます。
この完成品をもとに解説をしていきますので、ダウンロードしてくださいね。
https://drive.google.com/open?id=0Bzv5SDIG57yodEw2MDNYbDVKaUE
なおファイル内容は

・OuchCursorMovement.js
・AddEventListenerToWindow.js

となっています。
詳細はこれから書いていきます。

イベントを発火させる

AddEventListenerToWindow.jsを開いてください。
コメント部分はさっさと飛ばして、NTMO.ELW.EventListenerクラスを見てください。

注*用語についてはすでにまとめています

このクラスはイベントを実装してみるの記事で作ったイベント処理をクラス化して、ちょこっとだけいじったものです。
これは大丈夫ですね(前の記事を読んでいたら)。

もっと下に行くと、Window_Selectableクラスを改造している箇所があるかと思います。
createEventListenerメソッド内でNTMO.ELW.EventListenerクラスのインスタンスを作成しています。
コメントアウトで示している表記は別解です。
こんな書き方でもいけますよーということです。
今回Mapクラスを使っているのは、単に僕が新しいことに挑戦したかったからです。深い意図はありません

で、あとはイベントの発火部分です。
cursorDown()とかですね。
先ほど作ったNTMO.ELW.EventListenerクラスのインスタンスを、それぞれ適切な場所で発火させるようにしているだけです。
難しくないですね。
っていうか、イベントを実装してみるの記事でほとんど説明してるので書くことないです。
ほな次。

イベントハンドラーを登録する

お次はOuchCursorMovement.jsです。
まずcreateStatusWindowメソッドに注目してください。
_statusWindowはWindow_MenuStatusのインスタンスです。
これは先ほど改造したWindow_Selectableクラスを継承しています
したがって、自作したeventListenerオブジェクトも扱えます。

this._statusWindow.eventListener['onDown'].register(this.onHoge.bind(this));

これがイベントハンドラーの登録ということになりますね。

注目してほしいのは、イベントonUpとイベントonDownの両方にonHoge2が登録されていることです。
つまり、一つのイベントハンドラーをいくつものイベントで使い回すことも可能なのです。
もちろん、ぜんぜん違うイベントハンドラーを登録するのもOKです。
イベントハンドラーはいくつでも登録できるので、共通のイベントハンドラーと個別のイベントハンドラーでわけて登録させるのもありですね。

はい、以上です。
詳しいことはコアスクリプトを改造してみるですでに書いているので、不明な点は参照してもらえればなと思います。

残りのコードは少し詳しめに解説したいと思いますが、先にプラグインの仕様とかまとめときます。

AddEventListenerToWindow.jsの使用方法

Window_Selectableを拡張するプラグインです。
このプラグイン自体は何もおこないませんが、Window_Selectableのカーソル移動時にイベントを発火できるようになります。
Window_Selectableを継承したクラスのインスタンスにおいてイベントを登録してください。
各ウィンドウクラスのインスタンスは、通常Scene_XXXクラスにおいて作成されます。

例:ステータスウィンドウの下キーが押されたとき、onHogeメソッドを実行

this._statusWindow.eventListener['onDown'].register(this.onHoge.bind(this));

詳しいコードはOuchCursorMovement.jsをご覧ください。

AddEventListenerToWindow.jsの仕様

Window_Selectableクラスに以下のプロパティが追加されます。

-> eventListener

eventListenerで使用可能なイベント

-> onUp : 上カーソルを押したとき発火
-> onDown : 下カーソルを押したとき発火
-> onRight : 右カーソルを押したとき発火
-> onLeft : 左カーソルを押したとき発火

ユーザーは通常、eventListenerプロパティのregisterメソッドを使用します。
registerメソッドの引数には実行したい関数を指定します。

例:eventListener['onRight'].register(fnc);

OuchCursorMovement.jsのその他のコード

OuchCursorMovement.jsとAddEventListenerToWindow.jsを導入してゲームを起動したあと、ステータス画面を開いてください。
背景が戦闘画面風になっていると思います。

この処理の部分について書いていきたいと思います。

OuchCursorMovement.jsのcreateメソッドを見てください。
コメントでAddedとされている部分が追加コードです。

注*このコードは元のcreateメソッドの動きを完全に上書きしてしまうので、配布するプラグインとしてはあんまりよろしくない書き方です。

createSpritesetメソッドが追加されていますね。
createSpritesetメソッドが何をしているかといえば、戦闘画面を描画するためのスプライトを追加しているだけです。

次にupdateメソッドを見ましょう。
このメソッドは毎フレーム呼ばれます。
何の動きを追加したのかと言えば、この二つだけです。

$gameScreen.update();
$gameParty.requestMotionRefresh();

一行目は、メニュー画面でも$gameScreenのエフェクトを使えるようにするためのコードです。
二行目は、背景として表示されている戦闘画面のパーティーメンバーたちのモーション状態を更新するためのコードです。
つまりHPが減ったり増えたり状態異常にかかったりしたら、これでリアルタイムに変化します

ちょっと下の方に行ってloseHitPointGraduallyメソッドを見てください。
これはパーティーのHPを減らす処理をしています。
減らすたびthis._statusWindow.refresh();を呼ぶことにより、メンバーのHP状態を最新のものに更新するわけですね。

genOuchメソッドの詳細はコアスクリプトを改造してみるを参照してもらえればなと思います。
$gameScreen.startShake()は画面を揺らす処理です。
難しいことはないですね。

実行してみる

実行すると、メニュー画面の背景に戦闘画面が表示されていると思います。
この状態で装備を選び(別に他のでもいいですが)、カーソルを上下に移動させてください。
下に移動させるとコンソール画面に文字が二行表示されますね。
上に移動させると画面が揺れ、プレイヤーのHPが減ります。このとき、メンバーのHPによって背景のバトラー画像が変化することに注目してください。

終わりに

社会人の皆様、いかがでしたでしょうか。
今回作ったのはくだらないお遊びプラグインですが、なんだかプラグインで面白そうなことができる気がしませんか?
ツクールMVはもともと用意されている機能が豊富なので、僕みたいなプログラミング歴半年のヘッポコ野郎でも、一風変わったシステムを簡単に作ることができちゃいます。
これは大変素晴らしいことですよ。
僕が飽きずにプログラミングを続けられているのも、ツクールMVの基幹システムのおかげだと言っても過言ではありません。

と、ツクールMVを上げたところで本日の記事をしめたいと思います。
お疲れ様でした。

フォローする