1. このサイトではcookie (クッキー) を使用しています。サイトの利用を継続した場合、cookieの使用に同意したものとみなさせていただきます。 詳しくはこちらをご覧ください。

【解決済】敵キャラのステート異常に応じて、アニメーションの座標を変更したい

味噌原2019-05-27に開始した「ツクールMV」の中の討論

  1. 味噌原

    味噌原 ユーザー

    特定のステート異常の際に敵キャラが上下反転するプラグインを作成しています。
    敵キャラをそのまま上下に反転させると足元を軸にして反転してしまい、見た目が悪いため、
    敵キャラが上下反転している間は敵キャラのy座標を上にずらすことにしました。

    コード:
    Sprite_Enemy.prototype.update = function() {
        Sprite_Battler.prototype.update.call(this);
        if (this._enemy) {
            this.updateEffect();
            this.updateStateSprite();
    
            if (this._enemy._states[0] == 19 | this._enemy._states[0] == 21) {
                    this.y-=this.bitmap.height;
                    this.scale.x = 1;
                    this.scale.y = -1;
            } else {
                    this.scale.x = 1;
                    this.scale.y = 1;
                }
        } 
    ですが、それにつられて、アニメーションが不自然に高い位置に表示されてしまいます。
    (左のこうもりの敵です)
    WS000009.JPG

    アニメーションを同じ分だけ下へ座標をずらす処理を加えたいので、
    上記のコードの下にこのようなコードを追加しました。

    コード:
    Sprite_Animation.prototype.updatePosition = function () {
            if (this._animation.position === 3) {
                this.x = this.parent.width / 2;
                this.y = this.parent.height / 2;
            } else {
                var parent = this._target.parent;
                var grandparent = parent ? parent.parent : null;
    
                this.x = this._target.x;
                this.y = this._target.y;
    
                if (this.parent === grandparent) {
                    this.x += parent.x;
                    this.y += parent.y;
                }
                if (this._animation.position === 0) {
                    this.y -= this._target.height;
                } else if (this._animation.position === 1) {
                    this.y -= this._target.height / 2;
                }
    
    
                //敵のステートが転倒、墜落のとき
                if(this._target._states[0] == 21){
                    this.y += this._target.height;
                    this.y += 50;
                }
                if(this._target._states[0] == 19){
                    this.y += this._target.height;
                }           
    
            }
    
        };
    敵キャラのステート異常が特定のIDのときだけアニメーションの座標を下へずらすようにしたかったのですが、
    上記のコードで戦闘を実行したところ、画像のようなエラーが出てしまいました。
    WS000004.JPG
    おそらくは、//敵のステートが転倒、墜落のとき~以下のコードが間違っているのだと思います。
    敵のステート異常に応じてアニメーションの座標を変更するには、どうすればよいのでしょうか?
     
    #1
  2. エルトン

    エルトン ユーザー

    やりたい事を深読みすると、
    まずはすぷらいとえねみーのコードをこんな感じに
    コード:
            if (this._enemy.isStateAffected(19)){
                  this.y-=this.bitmap.height;
                  this.scale.x = 1;
                  this.scale.y = -1;
            
            }else if(this._enemy.isStateAffected(21)) {
                  this.y-=this.bitmap.height-150;
                  this.scale.x = 1;
                  this.scale.y = -1;
            } else {
                    this.scale.x = 1;
                    this.scale.y = 1;
            }
    んであにめーしょんはこんな感じか
    コード:
    Sprite_Animation.prototype.updatePosition = function () {
            if (this._animation.position === 3) {
                this.x = this.parent.width / 2;
                this.y = this.parent.height / 2;
            } else {
                var parent = this._target.parent;
                var grandparent = parent ? parent.parent : null;
    
                this.x = this._target.x;
                this.y = this._target.y;
    
                if (this.parent === grandparent) {
                    this.x += parent.x;
                    this.y += parent.y;
                }
                if (this._animation.position === 0) {
                    this.y -= this._target.height;
                } else if (this._animation.position === 1) {
                    this.y -= this._target.height / 2;
                }
    
               if(this._target.scale.y == -1){
                    this.y += this._target.height;
                    this.y += 50;
                }
            }
    
        };
     
    #2
  3. 味噌原

    味噌原 ユーザー

    ありがとうございます!
    無事、正しい位置にアニメーションが出るようになりました!
     
    #3

このページを共有