新しく作ったシーンの中で足踏みアニメを表示させる方法

ツミオ

ユーザー
いつもお世話になっております。

【質問】
現在、自作した新しいシーンに歩行グラフィック(マップ画面のイベントとかのことです)を表示させ、そのグラフィックに足踏みアニメをつけようと思っています。
そこでまずScene_Baseのprototypeを使って空のシーンを作りました。
次に歩行グラフィックを表示するために、作った空のシーンのinitializeメソッドに以下のようなコードを書いてみました。

コード:
Scene_Base.prototype.initialize.call(this);
//ここからキャラの生成
this.mini_caharacter_ruka = new ActionGame_MiniCharacter("Ruka", 10, 10);
this.sprite_mini_character_ruka = new Sprite_Character(this.mini_caharacter_ruka);
this.addChild(this.sprite_mini_character_ruka);

ActionGame_MiniCharacterとは、Game_CharacterBase.prototypeを使って作ったクラスで、initializeメソッドは以下のようなものです。
コード:
ActionGame_MiniCharacter.prototype.initialize = function(character_name,x,y) {
    Game_CharacterBase.prototype.initialize.call(this);
    //基本的な設定
    this.setImage(character_name, 0);
    this._originalDirection = 4;
    this._originalPattern = 2;
    this._stepAnime = true;

    //場所と向き初期化
    this.locate(x,y);
    this.setDirection(this._originalDirection);
    this.setPattern(this._originalPattern);

    //移動速度など設定
    this.setMoveSpeed(3);
    this.setMoveFrequency(3);
    this.setStepAnime(this._stepAnime);
};

これでひとまず下図のように歩行キャラクターが表示されるのですが(「ああああ」という文字は無視してください)、this.setStepAnime(true);にしているにもかかわらず、キャラクターは何の動作も示しません(足踏みアニメが表示されることを期待しています)。
しつもんよー.jpg

例えばSprite_Actorを画面に表示する場合、startMotion('walk');などとすれば勝手に歩行アニメが表示されていたので、その感覚でいけるかなあと思っていたのですが……(下図のような感じです)。
しつもんよー3.jpg


色々と原因を考えていたのですが、スプライトに対する操作は問題なくおこなえているので(下図のようにキャラクターの色調を変えたり、Sprite_ActorにstartMotionを指定したりすることです)、Game_CharacterBase.prototype(今回はActionGame_MiniCharacterです)での設定そのものか、設定をスプライトに反映させる方法がマズイ(勝手に歩行してくれると思っていたので、特にupdateなどはいじっていません)のかなあと考えています。
しつもんよー2.jpg
実際、シーンの中で
コード:
this.mini_caharacter_ruka._originalDirection = 0;
this.mini_caharacter_ruka.setDirection(0);
などと値をいじってみても何の反応も示しませんでした(向きが変わることを期待している)。

【まとめ】
長くなりましたので、最後にまとめておきます。
「新しく作ったシーンの中で足踏みアニメを表示させる方法」をご存知の方がいましたら、教えていただけませんでしょうか。

以上、よろしくお願いいたします。
 
ずばりお答えします。
ActionGame_MiniCharacter クラスの update が毎フレーム読まれてないのが原因です。
解決策は、新しく作ったという、空のクラス(便宜上 Scene_Tsumio と名付けます)に、
以下のように update メソッドを呼び出す処理を入れてみてください。

Scene_Tsumio.prototype.update = function() {
 Scene_Base.prototype.update.call(this);
 this.mini_caharacter_ruka.update();
};


多分これで、足踏みを始めると思います。Good Luck.

実は、これの検証のためにプラグインを作りましたので、せっかくなので、添付しておきますね。
ゴールデンウィーク、暇で暇で仕方が無かった僕に、課題を与えてくれた感じで、楽しんでやらせていただきました。

◆今日のワンポイントレッスン: update について
スプライトやウィンドウのような「見た目」を司るオブジェクトや、
シーンクラスのインスタンス(オブジェクト)は、
自動で、毎フレーム、update が行われます。
しかし、それ以外、特に、Game_xxxx オブジェクトは、
明示的に update を行わないと、自動で呼んではくれません。
「update 呼ばれてない!」と思ったら、まずはここを疑いましょう。
 

Attachments

  • TsumioSolveWalk.js
    2.2 KB · 閲覧: 49
最後に編集:
神無月サスケさん。

とてもわかりやすい解説、ファイルの添付をありがとうございます!
空のシーン(神無月サスケさんのファイルだとScene_Tsumio)のupdateメソッドにActionGame_MiniCharacterクラスのupdateメソッドを呼び出す処理を加えたところ、無事に足踏みをしてくれました。

「Game_xxxx オブジェクトは、明示的に update を行わないと、自動で呼んではくれません。」ということを肝に銘じておきます。
これを知らなかったため、問題がSprite_xxxにあるのか、それともGame_xxxの方にあるのか、はたまたそもそもSprite_xxxとGame_xxxの紐付けがうまくいっていないだけなのかの確認にすら実はとても手間取っていました。
もちろんそれはそれでいい勉強になったのですが、これから似たような問題に遭遇したときは「おっ、ひょっとしてGame_xxxのupdateをしていないのかな」ということを真っ先に疑ってみたいと思います。

ありがとうございました!
 
Back
トップ