プレイヤーから遠ざかるようにしていたイベントが何故か近づいてきます

田仲田仲
記事: 5
登録日時: 2020年7月18日(土) 12:15

プレイヤーから遠ざかるようにしていたイベントが何故か近づいてきます

投稿記事by 田仲田仲 » 2020年10月25日(日) 18:10

現在鬼ごっこゲームを作っています。
ゲームの内容は逃げるキャラクター(以下ターゲット)を追いかけながらダッシュしたり、障害物をジャンプで避けたりしながら捕まえるというものです。
そこでターゲット自身がジャンプで障害物を避けられるようなイベントを設置したのですが、稀にジャンプした後に逆にプレイヤーに近づくようになってしまいます。

以下、システムについて解説させていただきます。
まず、ターゲットは通常時はプレイヤーに近づきます。そして、範囲内に入ったらスイッチ「見つかった」がONになり、逃げます。これにはマンカインド様のプレイヤー探索プラグインを使用しています。
http://mankind-games.blogspot.com/2016/09/blog-post_8.html
画像

画像

逃げる時のルート設定は「遠ざかる」と「!this.canPass(this.x, this.y, this.direction()) ? this.moveRandom() : null;」です。後者はT字路や行き止まりに入って動けなくなった時に、ランダムな方向に移動するというスクリプトです。
画像


障害物をジャンプで避けるイベントの流れは以下の通りです。
画像
画像

<解説>
現在の座標を変数で取得する

ターゲットが向いてる方角に変数をズラす

コモンイベント:対象者取得により変数によって指定した座標のイベントのメモ欄に[対象者]と書かれているか調べ、書かれていればスイッチ「目の前に対象者」をONにする(変な方角にジャンプしないよう、念のため縦と横でX、Yと分けてあります)
画像

「目の前に対象者」がONになっていれば、向いていた方角にジャンプして障害物を避け、一歩進む


特に以下の状況だと必ず近づきます。
ターゲットに見つからない場所で待ち伏せ
画像
ターゲットが障害物を飛び越えたところでプレイヤーに気づき逃げる
画像
障害物を飛び越えるが、
画像
何故か方向転換してプレイヤー側に移動
画像
画像
その後障害物が無いのに何故か上方向にジャンプして壁にめり込む(この時の変数を調べると下から二番目の鉄骨の位置を示している)
画像


使用プラグインは以下の通りです
・TMMapHpGauge.js
・TemplateEvent.js
・TMRegionPassable.js
・MKR_PlayerSensor.js

原因はいくらか調べましたが、
・どこかで「見つかった」スイッチがOFFになったのでは→F9で確認したところONだった
・マップをループ設定にしていたからでは→ループ設定を無くしても起こった
・プレイヤーがダッシュしたりジャンプする際何かが起こっているのでは→どちらもできないようにしても何も変わらなかった
といった感じでした。

解答お待ちしております。

アバター
あかみどり
記事: 57
登録日時: 2017年7月08日(土) 12:07
連絡を取る:

Re: プレイヤーから遠ざかるようにしていたイベントが何故か近づいてきます

投稿記事by あかみどり » 2020年10月31日(土) 07:50

おはよーございます。
SSを元に同じものを作ってみようとしたのですが、
上手く作れなかったので憶測で回答します。

まず、遠ざかったターゲットが再び近づくのは
プレイヤーを見失ったときに、プラグインによって「見つかったスイッチ」が
自動的にオフになったからだと思います。
SSを見る限り、それがオフの状態の時は自律移動の設定が「プレイヤーに近づく」になっている為、
見失った時にすぐにプレイヤーに寄って来る設定になっていると思います。

次にジャンプの謎ですが、並列処理を見る限りジャンプの設定と座標を取得するイベントが
1つになっているのが問題だと思います。
ツクールのイベントは上から実行されていきますので、この並列処理のイベントは

座標を取得→スイッチオフ→条件を満たした場合移動ルートの設定を実行(ウェイト)×4→最初に戻る

というループになっています。
この場合、条件を満たさない場合はすぐに最初に戻り、座標を取得してくれると思いますが、
条件を満たした場合、ジャンプをするモーションの間ウェイトが挟まり、
その間座標の更新が行われません。
その為、左に飛んだ後、(並列処理が別イベントだったのもあり)
座標更新前にターゲットが上を向いてしまった為、
並列処理イベントの最後の方にある上を向いたときの条件分岐を満たしてしまい、
上にジャンプしたのではないかな?と思います。
と、エスパーをしてみたところで、修正案は

1 見つかったスイッチがオフの時の自律移動を見直す
2 座標を取得する為だけの並列処理のコモンイベントを別に作る
3 必要があるならジャンプの並列処理も修正(私は仕組みが分からないのでノータッチ)

かなーと思います。あと、並列処理が重かったらイベントの最後にウェイト1F入れてみてください。
試せないから、これで本当に解決できるかどうかは怪しいですが!

あとは
奏ねこま さんが変数とスイッチを別ウィンドウにてリアルタイムで監視できる
「変数・スイッチ監視ウインドウ」プラグインを公開されているので、これを使わせてもらうと良いですよ~
viewtopic.php?t=3082
---------------------------------------------
Twitter
https://twitter.com/aoki_akamidori
---------------------------------------------

“MV:質問” へ戻る