AreaEventプラグインと自律移動ルートに関して

アバター
ばや氏
記事: 22
登録日時: 2017年1月22日(日) 23:36
連絡を取る:

AreaEventプラグインと自律移動ルートに関して

投稿記事by ばや氏 » 2021年7月12日(月) 21:18

お世話になります。質問失礼いたします。かめお様のAreaEventプラグインhttp://ytomy.sakura.ne.jp/tkool/rpgtech/tech_mv/map/area_event.htmlを使用してアクションゲームを作っている者です。

マップチップを大きめに制作しているのでAreaEventプラグインで当たり判定を調節しているのですが敵キャラの自律移動ルートを設定しますと、左と上には移動するのですがなぜだか右と下には移動しません。すり抜けをオンにしますと動くのですが全く反応しなくなるので最悪すり抜けオンのキャラと接触できるようにしようかと考えております。(方法を調べてもいまいち理解できませんでしたが…;)


なにか解決策はありますでしょうか…また他の当たり判定プラグインの仕様も考慮しましたがどうしてもこちらのプラグインを使用したいです。何卒。ご教授いただければ幸いです。

アバター
WTR
記事: 559
登録日時: 2015年12月22日(火) 19:14

Re: AreaEventプラグインと自律移動ルートに関して

投稿記事by WTR » 2021年7月14日(水) 22:29

どうにかこうにか考えてみました。
右・下に移動しないのは
イベントが右・下向きのときイベントが自分自身と接触しているという奇妙な判定になるためです。

右・下にも移動するようにしたつもりですが
右・下にプレイヤーその他キャラクターがいる、歩けないマップチップがあるときは
移動するわけにいかないので当たり判定分の距離を保ちます。

適当な名前を付けてプラグインとして保存、本体プラグインよりも下に配置してください。
挙動おかしかったら…すみません!

コード: 全て選択

(() => {
   "use strict";
   //=============================================================================
   // Game_Event
   //=============================================================================
   Game_Event.prototype.eventAreaCoordinates = function(x, y, d, withDirection) {
      const area = this.getEventTriggerArea();
      const arrayPos = new Array(area.width * area.height).fill(null);
      const x2 = withDirection ? $gameMap.roundXWithDirection(x, d) : x;
      const y2 = withDirection ? $gameMap.roundYWithDirection(y, d) : y;
      return arrayPos.map((_, i) => {
         return {x: x2 + (i % area.width), y: y2 + Math.floor(i / area.height)};
      });
   };

   const _Game_Event_canPass = Game_Event.prototype.canPass;
   Game_Event.prototype.canPass = function(x, y, d) {
      const result = _Game_Event_canPass.call(this, x, y, d);
      const isAnyCharactersCollided = this.eventAreaCoordinates(x, y, d, true)
         .some(pos => this.isCollidedWithCharacters(pos.x, pos.y));
      const isMapPassable = this.eventAreaCoordinates(x, y, d, false)
         .every(pos => this.isMapPassable(pos.x, pos.y, d));
      return result && isMapPassable && !isAnyCharactersCollided;
   };

   Game_Event.prototype.isCollidedWithEvents = function(x, y) {
      const events = $gameMap.eventsXyNt(x, y).filter(event => event !== this);
      return events.length > 0;
   };
})();
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
アバター
ばや氏
記事: 22
登録日時: 2017年1月22日(日) 23:36
連絡を取る:

Re: AreaEventプラグインと自律移動ルートに関して

投稿記事by ばや氏 » 2021年7月14日(水) 23:24

WTR様
ご返信ありがとうございます!当たり判定の仕様上の問題だったのですね…!
プラグインの方無事動作いたしました!ここで詰まってると今後の制作に大きな支障だったので本当にありがたいです…大変助かりました…!(お礼と言ってはなんですがアイコンのかわいい子ちゃん描かせて頂きました!)
おかげさまで引き続き制作がんばれます :D 本当にありがとうございます!!


画像
アバター
WTR
記事: 559
登録日時: 2015年12月22日(火) 19:14

Re: AreaEventプラグインと自律移動ルートに関して

投稿記事by WTR » 2021年7月15日(木) 22:03

かわいいイラストありがとうございます!
描くのちょっぱやですね!
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/

“MZ:質問” へ戻る