横移動(範囲指定)+左右反転(Flip)では、文字通り横にしか動かないが、この関数ではオブジェクトを範囲指定で全方位に移動+往復させることができる。

動作デモ:● Turn Every Direction

計算回数をなるべく減らすために 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;

ライブラリ一覧へ戻る

Leave a Reply

Your email address will not be published. Required fields are marked *