衝突判定に関して

衝突判定に関して


衝突判定は通常はキャラクターイベントの矩形あたり判定と hit_evt 関数を使って行います。
衝突判定に関する関数は数が多くあり、
それぞれが目的別で使う場面が違い、
実行するタイミングが変わってくるものもありますが、


衝突判定の基本

hit_evt 等の衝突判定を行う関数で範囲指定した対象と
同じフレーム内で同時に衝突した場合は、
ID 番号の大きいキャラクターイベントが優先されます。


例えば上の図のような形で 84 番〜 95 番のキャラクターイベントを
hit_evt 関数で衝突判定の対象に指定した場合、
84 番〜 95 番のイベントが hit_evt を実行しているイベントと1フレーム内で同時に衝突した時は、
95 番のイベントと衝突したと判断されます。
(衝突した対象の cHitEvt には hit_evt を実行したイベントの ID 番号が格納されます)

衝突した時にキャラクター1つに対して1ダメージと言う計算をするような場面では、
戻り値(cRetVal)の合計衝突数でダメージ値を乗算(mul)すると対処可能です。


位置補正をする衝突判定の注意点

移動計算の所にも書いてありますが、
キャラクターのスクリプト実行を移動計算なしにしている場合、
位置補正をする関数(hit_evt_act、map_hit_act 等)に関しては
移動計算(char_move、char_move_vec)を実行してからでないと、
移動速度や座標の補正の効果が現れません。


パーティクルとの衝突判定

パーティクルとの衝突判定において同時に衝突した場合、
キャラクターイベントとは違い、
イベントが上から実行されると言う性質上、
同じパーティクルイベントと衝突判定を実行しているものに関しては、
hit_particle を先に実行した ID の小さいイベントが優先されます。


また、パーティクルと衝突判定をするイベントが複数以上存在し、
衝突時にパーティクルを消滅させる指定をしている場合、
(hit_particle の引数4に1、2、4、5にした時など)
複数のイベントが同時にパーティクルに衝突すると、
先に衝突したキャラクターイベントの処理によりパーティクルは消滅し、
ID が下にあるイベントの衝突は行われません。

例えば上の図のように ID 84 と ID 96 のイベントが
hit_particle で引数4に1(消滅)を指定したものを実行した場合、
対象となるパーティクルが同時に衝突すると、
ID 84 番のキャラクターイベントに衝突した時にパーティクルは消滅し、
ID 96 番のイベントはパーティクルとの衝突が行われない事になります。


hit_evt_zoomでの衝突判定

拡大・縮小率で衝突判定ができるのは
hit_evtid_zoom 関数が実行できるイベントだけとなるので、
座標を補正する act 系の衝突判定や、
マップチップとの衝突判定をする関数ではできません。

大きさに合わせて矩形あたり判定
(変数 cHitX1 cHitX2 cHitY1 cHitY2)
を変更する等で対処が可能です。



▲フレームが表示されない人はクリック