横移動(範囲指定)+左右反転(Flip)では、文字通り横にしか動かないが、この関数ではオブジェクトを範囲指定で全方位に移動+往復させることができる。
計算回数をなるべく減らすために point_distance と move_towards_point は要所で使うのみ。それ以外は Step で距離に対する減算しかしない。計算コストは低い。
point_distance は二点間距離を測るBuilt-In 関数。測った距離はインスタンス変数に記録される。距離から speed を毎回減算することで目的地をいつ通過したかを測っている。目的地点を通過/到達した時点で一度 speed は 0
にする。speed が 0
の場合は元来た場所へ戻るよう方向を再度算出してスピードも再度与える。
move_towards_point は目標となる XY 座標とスピードを指定すれば、オブジェクトを自動的に目的地まで移動させてくれる便利な Built-In 関数。実際には方向(direction)と 速度(speed)がオブジェクトを移動させているだけなので、speed を 0
にすればオブジェクトは移動停止する。
Create イベント用
///Init_TurnXY(speed, x1,y1, x2,y2); /* Init_TurnXY(3, 0,0, x,y); */ sm = argument0; xstart = argument1; ystart = argument2; tx = argument3; ty = argument4; tz = point_distance(x,y,xstart,ystart); move_towards_point(xstart, ystart, sm);
Step イベント用
///Step_TurnXY(); /* */ if (speed == 0) { move_towards_point(xstart, ystart, sm); }; if (tz < 0) { x = xstart; y = ystart; xstart = tx; ystart = ty; tx = x; ty = y; tz = point_distance(x,y,xstart,ystart); speed = 0; }; tz -= speed;