ページ 11

足跡をたどるイベントを実現させたいです(イベント同士の接触判定)

Posted: 2017年1月15日(日) 10:13
by しゆしゆ
件名の通り、
マップ上を動いているイベントが、プレイヤーの歩いた足跡に触れたらそれをたどって移動し始める動作を
作りたいと思うのですが、どうすればできるかわかりません。

プレイヤーの足跡についてはトリアコンタンさんの動的イベント生成とテンプレートイベントを組み合わせて
イベントを配置する形で実現できましたが、イベントに足跡をたどらせるのが難航しています。

イベント同士が接触しているかを判定しようと思い、移動するイベント側にスクリプトで
$gameMap.eventIdXy(this.character(0)._x, this.character(0)._y) 
と書いて自分のいる座標にあるイベントのIDを変数に取得できるか試したところ、案の定自分のIDを取得してしまいました。

あるイベントが自身と同じ座標にある別のイベントのIDを取得することさえできれば何とか実現できそうだと思うのですが、
どなたかその方法をご存知ないでしょうか?

Re: 足跡をたどるイベントを実現させたいです(イベント同士の接触判定)

Posted: 2017年1月15日(日) 13:13
by Trb
$gameMap.eventIdXy ではイベントが複数重なっている時一番若い番号のイベントを返すようになっています。
重なっているイベント全てのイベントIDを取得するには
$gameMap.eventsXy(this.character(0)._x, this.character(0)._y)  ← eventIdXy を eventsXy にする
と書けば全てのイベントIDを配列の形で取得できます。

もしイベントが3つも4つも重なるような状況が発生しうる場合、配列から目的の値を抜き出すにはある程度配列の扱い方が分かっていないと難しいですが、
単純にイベントが他のイベントと重なっているかだけ判定できればいいのでしたら
条件分岐のスクリプト欄に
$gameMap.eventsXy(this.character(0)._x, this.character(0)._y).length >= 2
と書けばいいです。
(length という記述で配列の長さを求めることができ、length >= 2 という記述で配列の長さが2以上 = つまりイベントが2つ以上重なってるという判定になる)
例.png

Re: 足跡をたどるイベントを実現させたいです(イベント同士の接触判定)

Posted: 2017年1月15日(日) 16:14
by しゆしゆ
trbさんありがとうございます。
ちゃんと複数のIDを取得するやり方が別にあるんですね。スクリプトに関しては調べてもなかなか出てこないので…

重なっているイベントによって動く向きを変えるようにしたいので、IDからイベントの名前なり使われている画像なりを取得して
条件分岐させたいですね。(「右向き足跡」を踏んだイベントは右に移動する、みたいに)

えーと、配列から自身のIDを除く一番大きいIDを取り出すことができればやれそうなかんじですね。

ありがとうございます、それでやってみます。