[掲示板へもどる]
一括表示

記事No: 21788 [関連記事]
タイトルマップEVの接触範囲に反応するようにしたい
投稿日: 2025/12/02 23:41
投稿者てとら [rergOdg332]

並列実行でキー入力を取得、キーを押した時点の主人公の座標を取得、
その座標からマップEVIDを取得し、コモンを起動という処理をしています。
マップEVが起動しては困るため、このような処理をしています。

しかし、この方法ではマップEVがある位置でしか起動せず、
設定した接触範囲に入っただけでは起動しません。
何かしらアドバイスを頂けたらと思います。


記事No: 21789 [関連記事]
タイトルRe: マップEVの接触範囲に反応するようにしたい
投稿日: 2025/12/03 08:58
投稿者としこC [eeierdr898]

今すぐ思いつくのは2種類、
システムへの依存度に違いがあるので、用途に合わせて修正が必要かも


  (1)処理に無駄は発生しますが、以下のような方法はあります。

コモンEvの並列実行から、決定キーが押された時、
マップ内の全マップEvのIDを取得してリスト化(マップに入った時点での事前作成可能)した上で、各IDに注目してループ処理

【変数操作+】から取得できる「起動範囲拡張X・Y」を誤差範囲として、
キー押下時の「各マップEv座標」と「主人公座標」の差で判定する.
(主人公の向きも加算するなら、視線先と足元で2度判定?)

判定に合致したマップEvのページ処理を呼び出す.

※【変数操作+】から「現在の起動ページ」を取得することで、ページ数を相対的に呼び出せば 同イベントIDに複数の処理を割り当て可能

※マップEvの全ID取得については、ID抜けを考慮するなら以下のような処理で確認可能
・【変数操作+】から「現在マップのマップイベント数」を取得
・変数を用いてID:0から順に【変数操作+】から「イベントID」を取得(存在しない場合-1が返る)
・発見数が前述の「現在マップのマップイベント数」に到達するまでループ


利点:マップEvの起動中ページや起動条件に左右されない
欠点:ある程度、ウディタのコマンド知識が必要


  (2)あるいは、ユーザー側で書くコマンド数を少なくするなら、


全てのイベントの最上ページの起動条件を「イベントと接触」に設定、
イベント内容は、マップEvのIDを、*特定変数(複数判定なら文字列へ)に保存するものとする

コモンEvの並列実行から、決定キーを押した時に、*特定変数に保存されたマップEvのイベント内容を呼び出す(*特定変数は、フレーム毎に初期化が必須)

利点:作成が楽
欠点:マップEvの実行ページがほぼ固定されてしまう、主人公の向きが考慮されない


なお、これらについては、
マップEvのイベント内容の呼び出しは、【イベント挿入】から
別イベントの実行中に呼び出さないために、「システム変数13」を確認する必要もあります。


こんな感じでいかがでしょうか?


記事No: 21790 [関連記事]
タイトルRe: マップEVの接触範囲に反応するようにしたい
投稿日: 2025/12/04 21:06
投稿者としこC [eeierdr898]

リスト化、同時複数検知は文字列ではなく、CDBの方が安全そう


記事No: 21791 [関連記事]
タイトルRe: マップEVの接触範囲に反応するようにしたい
投稿日: 2025/12/06 17:59
投稿者てとら [rergOdg332]

としこCさま、お答え頂きありがとうございます。
提案(1)の方でやってみようと思うのですが、確認のためお尋ねしたいのですが、
「起動範囲拡張X・Y」は、「接触範囲拡張」の事でよろしいでしょうか?
こちらの機能の見落としなら、申し訳ございません。


記事No: 21792 [関連記事]
タイトルRe: マップEVの接触範囲に反応するようにしたい
投稿日: 2025/12/06 20:03
投稿者としこC [eeierdr898]

> 「起動範囲拡張X・Y」は、「接触範囲拡張」の事でよろしいでしょうか?
> こちらの機能の見落としなら、申し訳ございません。

私の記入ミスです.
ご指摘のとおり「接触範囲拡張X」「接触範囲拡張Y」の項目です


記事No: 21793 [関連記事]
タイトルRe: マップEVの接触範囲に反応するようにしたい
投稿日: 2025/12/06 21:54
投稿者てとら [rergOdg332]

ありがとうございます。
行き詰った際には、また何かしらのご助力頂けたらと思います。


記事No: 21794 [関連記事]
タイトルRe: マップEVの接触範囲に反応するようにしたい
投稿日: 2025/12/08 20:15
投稿者てとら [rergOdg332]

としこC様の提案(1)で上手くいきました。

座標は足元と前方のを取得。
足元の座標を確認後、取得した接触範囲に1マス分加算し反応範囲を拡大、
変数操作+の「通行可能(タイル・Ev両方)」で
前方座標の通行状態でEVIDを取得するか判断

としました。
さらに色々条件付け加えないと、イベントが隣接した際にバグが起きますが、
大雑把にはこのような処理となりました。