【ツクールMV】飛行船の浮遊・着陸の速度を変えてみる
はいどーもこんにちは、ツクール界のニートです。
本日は久しぶりにプラグイン講座でもやろうかなと思いますよ。
お題
本日のお題はツクマテさんの「飛行船の浮遊・着陸時の速度を変更したい」という質問です。
こちらを見ながらステップバイステップでプラグインを作成していきましょう。
どうでもいいからプラグインが欲しいんじゃ! という方はGitHubをご覧ください。
ちなみに速度だけでなく、最高高度も設定できます。
確認すべき箇所
このお題で真っ先に確認するべき事項は
- 浮遊・着陸をコントロールしているコード
でしょう。
RPGツクールMVはrpg_objects.jsというファイルに飛行船の動きをコントロールするコードが入っています。
というか飛行船に限らず大抵の「動きをコントロールするコード」はrpg_objects.jsに入っています。
これはツクールMVが以下の決まりごとに(おおまかには)従っているためです。
- Game_で始まるクラスはモデルを担当する
このモデルという聞き慣れない言葉は、RPGツクールMVのみの話で言うならセーブデータに保存される値と、その値を使っておこなう処理をまとめた塊という認識で当たらずと言えども遠からずといったところでしょう。
ちなみにモデルはビューで利用されます。
ビューはrpg_sprites.jsに入っていまして、主に画面に表示されるもののことを言います。
RPGツクールMVの設計としては
- モデルはビューに依存しない
- ビューはモデルに依存する
という関係になっています(例外あるかも)。
すなわちビューはモデルを知っているが、モデルはビューを知らないという関係です。
ビューはモデルから得た値を用いて、画面に表示する位置やら向きやらなんやらを決めているわけなんですね(しつこいようですが例外はあります。例えばビューが直接ビューのアレコレを決めちゃってる場合も。セーブデータに保存したくないとかの意図があったのかも?)。
改変箇所
さてここまでは前置きです。
飛行船の上昇・下降速度を変更するには以下のコードを改変する必要があります。
Game_Vehicle.prototype.updateAirshipAltitude = function() {
if (this._driving && !this.isHighest()) {
this._altitude++;
}
if (!this._driving && !this.isLowest()) {
this._altitude--;
}
};
updateAirshipAltitudeとあるように、飛行船の高度の更新を担当する処理です。
_altitudeメンバをプラス1したりマイナス1したりしている箇所がまさに「高度を変更している」箇所ですね。
単純に考えるならば、以下のような改変で質問者さんの希望に添える改変が可能ということになります。
Game_Vehicle.prototype.updateAirshipAltitude = function() {
const speed = 5;
if (this._driving && !this.isHighest()) {
this._altitude += speed;
}
if (!this._driving && !this.isLowest()) {
this._altitude -= speed;
}
};
実際に上記の改変をおこなうと、飛行船の上昇・下降速度が変わっていることがわかるかと思います。
問題点
先ほど紹介した方法にはいくつかの問題点があります。
具体的には以下の通り。
- rpg_objects.jsを直接改変した場合、改変箇所の管理が大変
- コアスクリプトのバージョンがまだあるのかないのかは不明ですが、仮にあったとしたらそれでも問題に
- speedが最大高度を超えている場合、最大高度を超えた位置に船が固定されてしまう
1番目の問題点については有名ですね。
プラグインとして上記のコードを導入することで解決できます。
2点目については解説が必要かもしれません。
飛行船の高度を調整する際には最大高度の値を参照します。
この最大高度の値よりも現在の高度が高い(あるいは同じ)場合に上昇が止まります。
この最大高度はデフォルトでは48という値が与えられています。
ところが上記のコードにおけるspeedに48より大きい値を与えた場合、飛行船は最大高度を超えた位置で固定されてしまうのです!
試しに上記のコードにおけるspeedを100としてみてください。
飛行船の位置が明らかにおかしくなります。
フォロワー以上限定無料
特典はほとんどありませんが、入ってくださる方が増えれば増えるほど僕が喜ぶプランです(笑)
無料