【解決済】プレイヤーとイベントの距離判定条件分岐スクリプト

たこやきボーイ
記事: 119
登録日時: 2017年3月13日(月) 09:29

【解決済】プレイヤーとイベントの距離判定条件分岐スクリプト

投稿記事by たこやきボーイ » 2018年4月30日(月) 18:50

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

マップ上で例えば、
イベントを中心にして3×3マスや5×5マスの範囲にプレイヤーが入った(またはイベントから入った)
時に条件分岐が発動するようなスクリプトはありませんでしょうか?

この時、イベントの向きなどは一切気にしません。


ご教授よろしくお願いします。
最後に編集したユーザー たこやきボーイ on 2018年5月02日(水) 10:52 [ 編集 1 回目 ]

アバター
ベルファーレ長田(゜∀゜)
記事: 40
登録日時: 2017年9月08日(金) 13:22
お住まい: VIPツクールスレ
連絡を取る:

Re: プレイヤーとイベントの距離判定条件分岐スクリプト

投稿記事by ベルファーレ長田(゜∀゜) » 2018年5月01日(火) 18:43

どうも。
凄く簡単にではありますが、
指定したキャラクターが指定したキャラクターの範囲内にいるかどうかを
チェックするスクリプトを作成いたしました。

script.png


コード: 全て選択

isInRange = function( chara1Id, chara2Id, range ) {
    var chara1X = $gameMap._interpreter.character( chara1Id ).x;
    var chara1Y = $gameMap._interpreter.character( chara1Id ).y;
    var chara2X = $gameMap._interpreter.character( chara2Id ).x;
    var chara2Y = $gameMap._interpreter.character( chara2Id ).y;
    return ( chara2X - range <= chara1X )
        && ( chara2X + range >= chara1X )
        && ( chara2Y - range <= chara1Y )
        && ( chara2Y + range >= chara1Y );
};


条件分岐にてisInRangeに下記引数を指定して実行します。
引数1:チェック対象1のイベントID
引数2:チェック対象2のイベントID
引数3:チェック範囲距離(3×3の場合は3、5×5の場合は5を指定する。)
※条件分岐にスクリプトを指定したいのかな?と思ったので、このような形でisInRangeを定義しています。
※チェック対象にプレイヤーを指定する場合は、チェック対象1のイベントIDに-1を指定してください。
※チェック対象1とチェック対象2の指定を逆にしても結果に違いは無いと思います。

result.png


> イベントを中心にして3×3マスや5×5マスの範囲にプレイヤーが入った(またはイベントから入った)
> 時に条件分岐が発動するようなスクリプトはありませんでしょうか?

この意味がよく分かりませんでしたが、
もしこれが「イベントの範囲内にプレイヤーが入った瞬間に処理を実行する」という意味だった場合は、
上記イベントの内容を並列処理で実行すればいいのかなと思います。
----------------------------------------------------------------
◆名前
ベルファーレ長田(゜∀゜)◆AHYA/HaiA.
◆肩書
スーパーツクラー
◆Twitter
https://twitter.com/velfare_nagata
----------------------------------------------------------------
たこやきボーイ
記事: 119
登録日時: 2017年3月13日(月) 09:29

Re: プレイヤーとイベントの距離判定条件分岐スクリプト

投稿記事by たこやきボーイ » 2018年5月01日(火) 23:51

ベルファーレ長田(゜∀゜)さま返信ありがとうございます!

試してみたのですが、
並列処理以外はうまく動きました。
しかし、ベルファーレ長田(゜∀゜)の言うとおり
並列処理で実行したい為(範囲に入った時にすぐ処理したい)ので
困って状態ではあります。

並列処理時のエラーはこちらの画像になります。
スクリーンショット 2018-05-01 23.37.44.png
アバター
ベルファーレ長田(゜∀゜)
記事: 40
登録日時: 2017年9月08日(金) 13:22
お住まい: VIPツクールスレ
連絡を取る:

Re: プレイヤーとイベントの距離判定条件分岐スクリプト

投稿記事by ベルファーレ長田(゜∀゜) » 2018年5月02日(水) 06:05

どうも。
確かに動きませんね、なんでだろ…?

一応、こうすれば動きました。

コード: 全て選択

var interpreter = this;
isInRange = function( chara1Id, chara2Id, range ) {
    var chara1X = interpreter.character( chara1Id ).x;
    var chara1Y = interpreter.character( chara1Id ).y;
    var chara2X = interpreter.character( chara2Id ).x;
    var chara2Y = interpreter.character( chara2Id ).y;
    return ( chara2X - range <= chara1X )
        && ( chara2X + range >= chara1X )
        && ( chara2Y - range <= chara1Y )
        && ( chara2Y + range >= chara1Y );
};


並列処理で動かすことを考えると、
下記のようにこのスクリプトは一回だけ実行されれば良いようにした方がいいと思います。
1kai.png


でも、並列処理で起動してるときだけ、
関数の中で$gameMap._interpreter.character(1)のように存在するイベントを取得しようとするとnullになるのはなんでだろう?
理由がわかるスーパーツクラーの方は教えて頂ければ嬉しいです。
----------------------------------------------------------------
◆名前
ベルファーレ長田(゜∀゜)◆AHYA/HaiA.
◆肩書
スーパーツクラー
◆Twitter
https://twitter.com/velfare_nagata
----------------------------------------------------------------
たこやきボーイ
記事: 119
登録日時: 2017年3月13日(月) 09:29

Re: プレイヤーとイベントの距離判定条件分岐スクリプト

投稿記事by たこやきボーイ » 2018年5月02日(水) 10:51

ベルファーレ長田(゜∀゜)さん

お世話になっております。

今度はしっかり理想的な動きました!!
感謝いたします!

一応自分の作ってるゲームには大きな支障はないんですけど
一つだけ気になった事で、

条件分岐でisInRange( -1, 0, 3)のようにイベントIDを0(このイベント)で指定したものを
複数用意して動かすと、距離範囲に入ってない0でID指定したイベントも一緒に動いてしまう
みたいです。
イベントIDを普通に入力すれば問題ないですが、情報として連絡いたします。

表題の件は解決とさせていただきます

“MV:質問” へ戻る