戦闘中にアクターではなくアクターのホームポジションにアニメーションを表示する方法

アバター
ビービー
記事: 308
登録日時: 2016年1月12日(火) 18:40

戦闘中にアクターではなくアクターのホームポジションにアニメーションを表示する方法

投稿記事by ビービー » 2016年12月05日(月) 18:25

こんばんは

さっそく表題の件なのですが
戦闘中に召喚のような形でパーティーにアクターを加える際に
後ろから歩いて登場するのがちょっと違うなと思い
戦闘中アクター登場時の位置を指定するプラグインを作ってみました。
その際に戦闘アニメーションを再生できればなおかっこいいなと思いつきやってみました。

ですがアクターにアニメーションが追従する形で動くのが嫌だなーと思いまして。

なのでパラメータで指定した登場位置、それとアクターのホームポジション
それぞれでアニメーションを表示させる方法があれば教えていただきたいです。
よろしくお願いします。

コード: 全て選択

var parameters = PluginManager.parameters('BB_EntryPositionChanger');
var EP1x = Number(parameters['EntryPosition1x']);
var EP1y = Number(parameters['EntryPosition1y']);
var ET1 = Number(parameters['EntryTime1']);
var EA1 = Number(parameters['EntryAnimation1']);
var EP2x = Number(parameters['EntryPosition2x']);
var EP2y = Number(parameters['EntryPosition2y']);
var ET2 = Number(parameters['EntryTime2']);
var EA2 = Number(parameters['EntryAnimation2']);
var EP3x = Number(parameters['EntryPosition3x']);
var EP3y = Number(parameters['EntryPosition3y']);
var ET3 = Number(parameters['EntryTime3']);
var EA3 = Number(parameters['EntryAnimation3']);

//-----------------------------------------------------------------------------
// rpg_sprites.js 874行目
// エントリーポジション
//-----------------------------------------------------------------------------
var _Sprite_Actor_prototype_startEntryMotion = Sprite_Actor.prototype.startEntryMotion;
Sprite_Actor.prototype.startEntryMotion = function() {
    if (this._actor && this._actor.canMove()) {
        if ($dataActors[this._actor._actorId].note.match(/<EntryPosition1>/i)) {
            this.startMove(EP1x, EP1y, 0);
            if (EA1 != 0) {
                this._actor.startAnimation(EA1, true, 0);
            }
            this.startMotion('walk');
            this.startMove(0, 0, ET1);
        } else if ($dataActors[this._actor._actorId].note.match(/<EntryPosition2>/i)) {
            this.startMove(EP2x, EP2y, 0);
            if (EA2 != 0) {
                this._actor.startAnimation(EA2, true, 0);
            }
            this.startMotion('walk');
            this.startMove(0, 0, ET2);
        } else if ($dataActors[this._actor._actorId].note.match(/<EntryPosition3>/i)) {
            this.startMove(EP3x, EP3y, 0);
            if (EA3 != 0) {
                this._actor.startAnimation(EA3, true, 0);
            }
            this.startMotion('walk');
            this.startMove(0, 0, ET3);
        } else {
        this.startMotion('walk');
        this.startMove(0, 0, 30);
        }
    } else if (!this.isMoving()) {
        this.refreshMotion();
        this.startMove(0, 0, 0);
    }
};

プラグインを添付しておきます。
添付ファイル
BB_EntryPositionChanger.js
(6.08 KiB) ダウンロード数: 36 回

------------------------------------------------------
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
アバター
ビービー
記事: 308
登録日時: 2016年1月12日(火) 18:40

Re: 戦闘中にアクターではなくアクターのホームポジションにアニメーションを表示する方法

投稿記事by ビービー » 2016年12月10日(土) 00:30

こんばんは。

以前、戦闘中に座標を指定して戦闘アニメーションを表示する方法を質問していたので
http://tm.lucky-duet.com/viewtopic.php?f=23&t=2401&p=7769#p7769
それを見ながらいじってみました。

コード: 全て選択

var _Sprite_Actor_prototype_startEntryMotion = Sprite_Actor.prototype.startEntryMotion;
Sprite_Actor.prototype.startEntryMotion = function(index) {
    if (this._actor && this._actor.canMove()) {
        if ($dataActors[this._actor._actorId].note.match(/<EntryPosition1>/i)) {
            this.startMove(EP1x, EP1y, 0);
            if (EA1 != 0) {
            //ここから
                var sprite = new Sprite_Base();
                sprite.x = 0;
                sprite.y = 0;
                if(SceneManager._scene){ 
                    SceneManager._scene.addChild(sprite);
                    sprite.startAnimation($dataAnimations[66], true, 0);
                }
            //ここまで追加   
            }
            this.startMotion('walk');
            this.startMove(0, 0, ET1);
        } else if ($dataActors[this._actor._actorId].note.match(/<EntryPosition2>/i)) {
            this.startMove(EP2x, EP2y, 0);
            if (EA2 != 0) {
                this._actor.startAnimation(EA2, true, 0);
            }
            this.startMotion('walk');
            this.startMove(0, 0, ET2);
        } else if ($dataActors[this._actor._actorId].note.match(/<EntryPosition3>/i)) {
            this.startMove(EP3x, EP3y, 0);
            if (EA3 != 0) {
                this._actor.startAnimation(EA3, true, 0);
            }
            this.startMotion('walk');
            this.startMove(0, 0, ET3);
        } else {
        this.startMotion('walk');
        this.startMove(0, 0, 30);
        }
    } else if (!this.isMoving()) {
        this.refreshMotion();
        this.startMove(0, 0, 0);
    }
};

とりあえずテストという事でこんな感じでいけるだろうと戦闘テストをやってみたのですが
なぜだかアニメーションの音はするのに絵が出ないというおかしな状態になってしまいました。

おそらく画面外にアニメーションを表示してしまっているのではないかと
sprite.xとsprite.yを色々な数値にしてみたのですが、やはり音が出るだけでした。

どうすればアニメーションの絵も表示できるのかがわかる方、教えていただけると助かります。
よろしくお願いします。
------------------------------------------------------
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
アバター
まっつUP
記事: 1155
登録日時: 2016年8月11日(木) 15:38
お住まい: タケノコ王国

Re: 戦闘中にアクターではなくアクターのホームポジションにアニメーションを表示する方法

投稿記事by まっつUP » 2016年12月10日(土) 11:55

ビービー様
お世話になります。

sprite.startAnimationの前に
Scene_Battle.prototype.createSpritesetがまだ呼び出されていないのが原因だと思います。

追記:Scene_Battle.prototype.createSpriteset中に
sprite.startAnimation周りをリファクタリングして無理やりぶちこんでやったら一応アニメーションは再生されました。
ここで再生する意味があるかは謎です。
RPGで笑顔を・・・

ツイッター(ツクラーの巣窟)(閲覧は自己責任でお願いします)
https://twitter.com/mattuup

github
https://github.com/mattuup/RPGMakerMZ
アバター
ビービー
記事: 308
登録日時: 2016年1月12日(火) 18:40

Re: 戦闘中にアクターではなくアクターのホームポジションにアニメーションを表示する方法

投稿記事by ビービー » 2016年12月10日(土) 14:02

まっつUPさん

なるほど、まさかspriteが呼び出されていなかったんですね。
考えもしませんでした。

試しに戦闘中にイベントで仲間を加入させたらちゃんとアニメーションしていました。

もともと戦闘中に加入した時ように作りはじめたプラグインなので
戦闘開始時にアニメーションを再生させるのはあきらめようかと思います。

ヴァルキリープロファイルのように
主人公とそれ以外のパーティーメンバーで違う登場ができたらかっこいいなと
夢が広がっていたんですが
私が今作っているゲームはヴァルキリーではないので
まぁいいかなと

このたびは回答していただきありがとうございました。
これにて解決とさせていただきます。
------------------------------------------------------
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/

“MV:質問” へ戻る