導入
collision_lineは(x1, y1)と(x2, y2)を結ぶ直線と衝突する物体のIDを返してくれますが、(x1, y1)に最も近い物体のIDを返すわけではありません。
「視点」の概念を導入するとき、(x1, y1)に最も近い物体のIDを返してくれたら便利です。悩んでいる人の為にも、その関数を作ることにしました。
※海外の人が既に同じ関数を作っていましたが、バージョンが異なっているし、コードが長めだったので、新規に作ることにしました。
コード
以下のコードを、「スクリプト」に突っ込んでおけば動きます。
(x1, y1)と(x2, y2)を結ぶ直線上にある全てのobjの内、(x1, y1)に最も近いobjのインスタンスIDを返します。
function collision_line_first(x1, y1, x2, y2, obj)
{
var list_ = ds_list_create();
collision_line_list(x1, y1, x2, y2, obj, false, true, list_, true);
if (ds_list_size(list_) >= 1)
{
list_0 = list_[| 0];
ds_list_destroy(list_)
return list_0;
}
ds_list_destroy(list_);
return noone;
}
※データリストがインスタンスであることに注意
使わなくなったds_listは自動的に捨てられるわけではないので、ds_list_createをしたあと、ds_list_destroyで必ずインスタンスを捨てる必要があります。
自分はその失敗をしてメモリを一瞬で喰われました…。