イベントをマップ上から完全に削除したい

論理イヌ
記事: 186
登録日時: 2020年3月13日(金) 13:05

イベントをマップ上から完全に削除したい

投稿記事by 論理イヌ » 2021年6月20日(日) 22:44

イベントの一時消去をしても、「指定位置の情報取得」からイベントIDが取得できてしまいます。

$gameMap.eraseEvent(n);
こちらは試しましたが、ダメでした。

イベントIDが取得できないくらい完全にイベントを削除する方法はないでしょうか?

やりたいこととしては、
「イベントAにもっとも近いイベント(仮にB)を取得ししたあと、イベントAをイベントBに一歩近づける」
ということです。

「イベントAにもっとも近いイベントの取得」は下記URLのコードを実行していますが、イベントBを一時消去しても、イベントAはイベントBが消去した座標に向かっていきます。
viewtopic.php?t=6762

コード: 全て選択

let vid = 22; // 取得する変数番号
let min = 20; // 最大距離
let get = null;
$gameMap.events().forEach(function(event){
 let distance = $gameMap.distance($gamePlayer.x,$gamePlayer.y,event.x,event.y);
 if (min >= distance) { min = distance; get = event; }
});
$gameVariables.setValue(vid, get ? get.eventId() : 0);


ちなみに、「イベントAがイベントBに近づく」は下記のコードで実現しています。
https://qiita.com/krmbn0576/items/ea2c5007d709d7a1d2ab

コード: 全て選択

this.moveTowardCharacter($gameMap.event(イベントBのID))

名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: イベントをマップ上から完全に削除したい

投稿記事by 名無し蛙 » 2021年6月20日(日) 23:42

どうもこんばんは
出来ない事もないですけど他に影響が出る可能性があるのであまりお勧めはしませんね
これくらいならfilterやreturnを使う程度で充分では

コード: 全て選択

// filterを使用する場合
$gameMap.events().filter(event => !event._erased).forEach(event => {
    let distance = $gameMap.distance($gamePlayer.x,$gamePlayer.y,event.x,event.y);
    if (min >= distance) { min = distance; get = event; }
});

// returnを使用する場合
$gameMap.events().forEach(event => {
    if ( event._erased ) return;
    let distance = $gameMap.distance($gamePlayer.x,$gamePlayer.y,event.x,event.y);
    if (min >= distance) { min = distance; get = event; }
});
論理イヌ
記事: 186
登録日時: 2020年3月13日(金) 13:05

Re: イベントをマップ上から完全に削除したい

投稿記事by 論理イヌ » 2021年6月21日(月) 00:00

早速のご返信ありがとうございます。
試したところ、理想の動きをしました!
感動しました。ありがとうございます。

event._erased……!?
そういう判定の仕方なんですね!
ちょうど、別の部分のスクリプトでも削除されているかどうか知りたかったので、教えていただけて嬉しいです。
ありがとうございました!

“MV:質問” へ戻る