[制作者向け] プラグイン作ったりする話|˙꒳˙)ノ[ツクールMV]
ツクーラーさんの役に立てばいいなみたいな記事
前回記事のエフェクトの下にふきだしが隠れてしまう問題。
これを解決するお話。
スクリプトだけで何とかならないかな
→ならんかった('Д';)
そんなこんなで、ツクールMV自体の仕様の確認をする感じになりました。
ツクールMVのゲーム上の動作はJavascriptで書かれている。
そうなると、Javascript勉強したらプラグイン作れる?となるけれど、
ツクールの仕様もあるので、Javascriptだけじゃ足りない。
どっちかというと、ツクールの仕様を知る方が大変('ω')
そんな感じで、『ふきだし埋もれる問題』を解決した手順を書いていくのです。
現在過去未来問わず、同じ問題で困ってる人、の参考になれば良いな✨
・ツクールMVの仕様を追う
まず、アニメーション表示のスクリプトを調べる。
検索するとすぐに出てくる。
this.character(イベントID).requestAnimation(アニメーションID)
これを追っていくのが多分一番楽なのである|˙꒳˙)
キャラクター(イベント)を対象にしているので、それっぽい所を漁る。
このthisが、どこの事を指して、どの命令を使っているのかを調べる必要がある。
『rpg_objects.js』のGame_CharacterBaseに同じ命令『requestAnimation』を見つける。
Game_CharacterBase.prototype.requestAnimation = function(animationId) {
this._animationId = animationId;
};
アニメーションのIDを渡しているだけという仕様('ω')ナンダト?
ので、ここから関連する所を探すのに、全てのjsファイルを開き、
探していくと、ここにたどり着いた。
Sprite_Character.prototype.setupAnimation = function() {
if (this._character.animationId() > 0) {
var animation = $dataAnimations[this._character.animationId()];
this.startAnimation(animation, false, 0);
this._character.startAnimation();
}
};
どうやら、常にアニメーションIDを監視して、
0より大きかったら実行するってしてるらしい?
マジデ('ω')?
その後、最後の行の this._character.startAnimation(); を探すと、
Sprite_Base.prototype.startAnimation = function(animation, mirror, delay) {
var sprite = new Sprite_Animation();
sprite.setup(this._effectTarget, animation, mirror, delay);
this.parent.addChild(sprite);
this._animationSprites.push(sprite);
};
にたどり着く。
ここの中の1行目
var sprite = new Sprite_Animation();
ここでようやく、アニメーションのオブジェクトの作成をしている所までたどりついたのである。
このオブジェクトに、z というプロパティがあり、
ツクールMVでは、z は主に階層を管理するのに使われている。
0:地面 1:キャラ下 3:キャラ 4:タイル☆
5:キャラ上 6飛行船影 7:ふきだし 8:アニメーション
こんな仕様らしい。
2は何だろう?影用かな('ω')?
後は、zの初期値を書き換えるか、sprite.setupの中でzを書き換えるかである。
初期値を直接変えてしまうと、他のイベントにも影響が出る。
今まで作ったイベントに影響を与えず、好きな時に階層を書き換えらえるようにしたい。
そこで、スクリプトでrequestAnimationを呼び出すときに、階層指定もできるようにする事にした。
スクリプトでrequestAnimationを呼び出した時に指定した階層を、
Sprite_Animationのsetup まで渡し続けていくのである('ω')
■手順
1.Game_CharacterBaseに繋ぐための階層関係のプロパティを作る
Game_CharacterBase.prototype.initMembersの中に
this._animationZ = 8;
を追記する。
元のソースがIDを渡す時に_animationIdにしてるから、
Z軸の階層なので、_animationZ という名前にしてみた。
⁼8は、無くても問題ないけど初期化しておきたい欲。
2.スプライトから呼び出す時用に、引数にanimationZ追加
変数名は、元の変数に合わせて似た感じでつけただけである|˙꒳˙)
↓こんな感じ
Game_CharacterBase.prototype.requestAnimation = function(animationId, animationZ) {
this._animationId = animationId;
this._animationZ = animationZ;
};
3.animationIdを渡しているのと同じ感じで、_animationZを渡すやつも作る
Game_CharacterBase.prototype.animationZ = function() {
return this._animationZ;
};
4.setupAnimation内でstartAnimation呼び出す時に_animationZ渡して
this.startAnimation(animation, false, 0, this._character.animationZ());
5.startAnimationにも引数を追加して受け取れるようにして、
それをsetupの所に放り込んで… (aniZという名前にした)
Sprite_Base.prototype.startAnimation = function(animation, mirror, delay, aniZ = 8){
var sprite = new Sprite_Animation();
sprite.setup(this._effectTarget, animation, mirror, delay , aniZ);
(略)
}
6.放り込んだのを受け取るようにsetupにも引数追加して
Sprite_Animation.prototype.setup = function(target, animation, mirror, delay, aniZ) {略}
7.setupの中に this.z を変更するのを追記する
this.z = aniZ;
こんな感じで、ようやく渡し終わって関連付け完了。
これで、スクリプトで呼び出す時に階層指定できるようになった
完成 (*´꒳`*ノノ゙パチパチ
ヽ('ω') 最近お世話になった人の作品情報 ('ω')ノ
DLsiteスプリングセール中|˙꒳˙)ノシ
温室育ちのお嬢様にエロゲの知識しかない俺がHな授業をする事になった件!
ハイパーうさぎ工房
Le dernier saint chevalier
B.H.C
いんもらる都市 -ロティのえっちな発明物語-
ちぇすとぼっくす
女の子が着衣のまま精液とおしっこをかけられるCG集
ちゃせたの庭