ページ 22

Re: メニュー画面の任意の場所にSVバトラーを表示したい

Posted: 2017年3月12日(日) 01:28
by maker-b
フトコロ様

ご回答ありがとうございます!
非常に参考になります。
フトコロ様のプランを実装しようとすると、SVキャラが固定絵となってしまいました。
イメージ的にはバトル中のようにSVキャラがアニメーションしている絵をジョブチェンジ画面メニューに出したいと
思っています。

そこで皆様からのご指摘を参考にして以下の状態までたどり着きました(汗)

関連するプラグインとしては

YEP_ClassChangeCore
YEP_CoreEngine

でした。
更にしらべていくと
YEP_CoreEngineの

コード: 全て選択

//=============================================================================
// Window_SkillStatus
//=============================================================================

Window_SkillStatus.prototype.refresh = function() {
    this.contents.clear();
    if (this._actor) {
        var w = this.width - this.padding * 2;
        var h = this.height - this.padding * 2;
        if (!eval(Yanfly.Param.MenuTpGauge)) {
          var y = h / 2 - this.lineHeight() * 1.5;
        } else {
          var y = 0;
        }
        var xpad = Yanfly.Param.WindowPadding + Window_Base._faceWidth;
        var width = w - xpad - this.textPadding();
        this.drawActorFace(this._actor, 0, 0, Window_Base._faceWidth, h);
        this.drawActorSimpleStatus(this._actor, xpad, y, width);
    }
};
ここで、アクターのフェイスを表示していることまで判明しました!
ここに、SVキャラをアニメーションで表示させる為にはやはり新規でスプライトを表示させるしか
ないのでしょうか?

ちなみに、私の想像ですが、
① メニュー画面が初回createされた時に、一度だけ new sptireを作っておき
② キャラクターが変更されるたびに、そのspireteを
  sprite.setBattler(this._actor);
  で更新すれば、removeも必要ないという理解でOKでしょうか?

java script初心者の為、皆様のお知恵をいただければ幸いです。

Re: メニュー画面の任意の場所にSVバトラーを表示したい

Posted: 2017年3月12日(日) 14:33
by 奏ねこま
簡単に表示するだけなら、
new Sprite_ActorするのはScene_Class.prototype.create(YEP_ClassChangeCore.js)の中、
setBattlerするのはScene_Class.prototype.refreshActor(YEP_ClassChangeCore.js)の中、
で良いんじゃないでしょうか。
なお、new Sprite_ActorしてaddChildするタイミングは、Scene_Class.prototype.createの中でも
refreshActorの直前が良いと思います。

Re: メニュー画面の任意の場所にSVバトラーを表示したい

Posted: 2017年3月12日(日) 22:14
by maker-b
奏ねこま 様

お世話になっております。
ご回答いただきありがとうございます。
new Sprite_ActorするのはScene_Class.prototype.create(YEP_ClassChangeCore.js)の中、
はい、早速実装しました。
これは問題なく表示されております。

コード: 全て選択

var actor = this.actor();
    var sprite = new Sprite_Actor(actor);
	sprite.setHome(480,270)
	sprite.startMove(0,0,0);
	sprite.startMotion('walk');
	this.addChild(sprite);
こんな感じでうまくいきました!
ありがとうござます。
setBattlerするのはScene_Class.prototype.refreshActor(YEP_ClassChangeCore.js)の中、
すみません。
わたしが根本的に理解できていないと思われますが
setBattlerしようとしているのは、上記で作成したspriteに対してですよね?
Scene_Class.prototype.refreshActorにおいては new Sprite_Actor せずに

this.sprite.setBattler(actor);

と書きたいと思っていましたが、当然 spriteが宣言されていないのでエラーとなってしまいます。
上記spriteを取得する必要があるのですが、どのようにすればよろしいでしょうか。
本当に申し訳ありません・・・・

Re: メニュー画面の任意の場所にSVバトラーを表示したい

Posted: 2017年3月13日(月) 00:03
by 奏ねこま
最初に作るときにthis.spriteの中に入れておけば良いんじゃないでしょうか。
this.sprite = sprite;
みたいに。

Re: メニュー画面の任意の場所にSVバトラーを表示したい

Posted: 2017年3月14日(火) 14:16
by maker-b
奏ねこま 様

お世話になっております。
無事解決いたしました!
頂いたご意見を参考に

コード: 全て選択

Scene_Class.prototype.create = function() {
    Scene_MenuBase.prototype.create.call(this);
    this.createHelpWindow();
    this.createCommandWindow();
    this.createStatusWindow();
    this.createItemWindow();
    this.createCompareWindow();
    
    //ここから改変
    var actor = this.actor();
    this.sprite= new Sprite_Actor(actor);
	this.sprite.setHome(480,270);
	this.sprite.startMove(0,0,0);
	this.sprite.startMotion('walk');
	this.addChild(this.sprite);
    //ここまで
    
    this.refreshActor();
};

Scene_Class.prototype.refreshActor = function() {
    
    //ここから改変
    var actor = this.actor();
    this.sprite.setBattler(actor);
    this.sprite.setHome(480,270);
    //ここまで	
    this._commandWindow.refresh();
    this._statusWindow.setActor(actor);
    this._itemWindow.setActor(actor);
    this._compareWindow.setActor(actor);
    
};
これでいけました!
createする際に最初から thisのspriteとして宣言しておくと良いわけですね!
大変参考になりました!
サポート本当にありがとうございます!

上記コードを実行すると、キャラクターを変更するたびに右からSVがスライドして出てきますが
これは多分 Sprite_Actorの設定の問題だと思います!

本当にありがとうございます!