ツクールMVのスクリプトで文章の表示を行う方法+

ツクールMVの制作で、イベントコマンドのスクリプトを使って文章を表示している方向けの記事です。

この記事を読むにあたって
ひつようなちしき:
・スクリプトコマンドで文章の表示ができる
・空の自作プラグインを作れる

次回の記事から見たほうが分かりやすいかも?

ツクールMVスクリプトリファレンスwiki を見ると、
>$gameMessage.add("表示する文章")
しましょうと書いてあります。
実際にこれだけで文章の表示は可能です。

ところが、これだけだと、前後に他の処理を組み合わせた時に問題が起こります。
例えば次のような場合

スクリプトを分けているので注釈の↓にあるように文章が表示されると思いますが、

このように繋がって表示されてしまいます。

あるいは次のような場合

'主人公たちは移動した'のメッセージが出た後に、Move1を再生したいですが、この方法だと'主人公たちは移動した'のメッセージが表示された瞬間にSEが鳴ってしまいます。

これらの問題を解決するために、スクリプトを足す必要があります。
$gameMessage.newPage()
this.setWaitMode('message')
の2つです。これで$gameMessage.addの前後を挟んで、

$gameMessage.newPage()
$gameMessage.add('表示する文章')
this.setWaitMode('message')

とすると、うまくいきます。

メッセージの後のSEなどの処理も、ちゃんと待ってくれるようになります。

でも毎回
$gameMessage.newPage()
this.setWaitMode('message')
を書くのも大変ですよね?
こんな時は関数化しちゃいましょう。

空のプラグインを作って(プラグインの作り方はまた記事にします)
グローバル空間(なにもないところに書けばOK) に以下を書きます。

Game_Message.prototype.show = function(it, Message) {
    $gameMessage.newPage()
    $gameMessage.add(Message)
    it.setWaitMode('message')
};

このプラグインを読み込んで、次のように書きます

これで先程の画像と同じようにきちんと文章が分かれて表示されます。
少し面倒なのが、呼び出す時に
$gameMessage.show(this, 'メッセージ')
というふうに、括弧のはじめにthisとコンマ , を書く必要があります。
でも毎回2行追加するよりは楽だと思う。
(きっと、ちゃんと表示しようとすると、こういう風にいささか面倒になるので、リファレンスwikiを書かれた方は$gameMessage.addだけを紹介したんだと思います。いつも分かりやすい記事をありがとう)

追記:
thisを書くのが煩わしい場合は、this.setWaitMode('message')だけを分けちゃいましょう

Game_Message.prototype.show = function(Message) {
    $gameMessage.newPage()
    $gameMessage.add(Message)
};

// スクリプトにて
$gameMessage.show('メッセージ')
this.setWaitMode('message')

こっちのほうが、自分で処理の終わりを決められるので便利かもしれない。
(実際はthis.wait()を使っても$gameMessage.add(Message)の代わりになるけど、$gameMessage.add(Message)を使ったほうが『正しい』です)


この記事が気に入ったらサポートをしてみませんか?