グリッドのパスを設計する。パスの設計に成功した時にtrueを返す。
mp_grid_path(id,path,xstart,ystart,xgoal,ygoal,allowdiag)
この関数を使用すると、定義済みの mp_grid を使用して障害物を避けながらスタート地点からゴールまでをたどるパスを生成することができます。
(xstart, ystart)はグリッド上でのパスの開始座標となり、(xgoal, ygoal)は目標座標をとなります。また"allowdiag"にtrueを指定すると、斜め移動を許可することができます。そしてパスが見つかった時には戻り値はtrueを返します。
以下の画像では、これがすべて一緒にどのように機能するかを見ることができます:
"pipe"オブジェクト(障害物)がグリッドの中にあり、ゲームオブジェクトはこれを避けて移動しなければなりません。 緑色のラインは斜め移動を許可したもの、赤色のラインは斜め移動を禁止したものとなります。緑色のラインはとてもエレガントですが、ゲームのルールによってどちらを使用するかは異なります。
作られるパスは現在のインスタンスに依存しないものです。グリッドIDを持つ特定のインスタンスのパスとなります。
またデバッグ機能としてmp_grid_draw()?により、パスを可視化することもできます。
パスは事前に作成しておく必要があります(リソースとして登録しておいたもの or path_add()により作成したもの)。またこの関数によりパスはメモリ上で上書きされます。
globalvar grid; grid = mp_grid_create(0, 0, room_width div 32, room_height div 32, 32, 32); mp_grid_add_instances(grid, obj_wall, false); with (obj_Enemy) { path = path_add(); if mp_grid_path(grid, path, x, y, obj_Player.x, obj_Player.y, 1) { path_start(path, 0, 3, 0); } }
上記のコードはグローバル変数"grid"にグリッドを作成し、mp_gridを生成しています。そして敵オブジェクト"obj_Enemy"が、プレイヤー"obj_Player"のところまで移動するパスを生成し、パスが見つかれば敵はプレイヤーのところまで移動を開始します。