ドキュメント / GameMakerJapan / GML関数 / ゲームの動作に関する関数群


GML関数 / ゲームの動作に関する関数群


■目次


動作経路(path)に関する関数

パスに関する関数

  • path_start(path,speed,endaction,absolute) - カレントインスタンスにパスを設定し、追従させる。
    • 引数
      • (path) : 定義したパスを指定する。
      • (speed) : 動作スピードを指定する。負であればパスを逆走する。
      • (endaction): パスが終了したときの動作を指定する。
                    0 : 動作停止する。
                    1 : 開始位置に戻り、再び動作開始する。
                    2 : 現在の位置から再び動作開始する。
                    3 : スピードの符号を逆にすることでパスを逆走する。
      • (absolute) : パスの扱いを指定する。(true/false)
                    true  :パスを絶対座標として扱う。
                    false :パスを相対座標として扱う。
  • path_end() - カレントインスタンスのパス追従を終了させる。

パスに関する変数

  • path_index *- カレントインスタンスのパスindex。*この値は読み取り専用である。
  • path_position - 動作パス中の位置を表す。0は開始位置、1は終了位置を表す。0?1の値をとる。
  • path_positionprevious - 動作パス中の直前の位置を表す。衝突イベント等にこの値を使用することが出来る。
  • path_speed - パスを進むスピード(スピード=ステップごとに進むピクセル数)。負であれば逆走する。
  • path_orientation (デフォルト値:0) - パス全体の補正角度を設定する(0?360)。0が通常で、反時計回りに設定できる。
  • path_scale (デフォルト値:1) - パスの倍率を示す。1で等倍、より大きければそれだけ拡大する。
  • path_endaction - パスが終了した時の動作。数値と意味は上を参照。

モーション・プランニング(Motion planning)に関する関数

ステップ毎に判断し動作させる関数

  • mp_linear_step(x,y,stepsize,checkall) - 目標座標に直進し、障害物に当たると静止する。目標座標に到着するとtrueを返す。
    • 引数:
      • (x,y) : 目標座標
      • (stepsize): 設定したステップ数ごとに判断する
      • (checkall): 障害物判定するオブジェクトの種類を設定する
        	false: solid属性のみ判定
        	true : すべてに判定
  • mp_potential_step(x,y,stepsize,checkall) - 障害物を回り込んで回避しながら目標座標に向う。目標座標に到着するとtrueを返す。
    • 引数:
      • (x,y) : 目標座標
      • (stepsize): 設定したステップ数ごとに判断する
      • (checkall): 障害物判定するオブジェクトの種類を設定する
        	false: solid属性のみ判定
        	true : すべてに判定
  • mp_potential_settings(maxrot,rotstep,ahead,onspot) - mp_potential_step関数で行う回避運動のパラメータを設定する。
    • 引数:
      • (maxrot) : 一回の処理で可能な進行方向変化量の最大値(デフォルト値:30)
      • (rotstep): 回避運動の実行間隔(ステップ数)(デフォルト値:10)
      • (ahead) : 障害物認識のための先読みステップ数(デフォルト値:3)
      • (onspot) : 回避運動の有無(デフォルト値:true)
補足
この関数は、mp_potential_step関数の回避運動パラメータを設定します。mp_potential_step関数は次のように動作します。
  1. 障害物が無い場合、目標に向って直進します。
  2. (ahead)で設定したステップ数分だけ障害物の有無を先読みします。
  3. 障害物を発見した場合は、右か左のどちらか最善の方向へ回避する運動に切り替わります。 (ahead)で回避運動を開始するタイミングを設定します。値を小さくすると障害物に近づいてから回避し始めます。(rotstep)で回避運動を実際に行うタイミングを設定します。この間隔を短くすれば小刻みに判定するので回避率が上がりますが、その分スピードは遅くなります。(maxrot)で一度に行う進行方向の最大変化量を設定します。これを大きくすると、各回避ステップで進行方向を大きく変化させることが出来るので障害物を回避しやすいですが、本来通るべきパスの精度が悪くなってしまいます。小さく設定すればパスをスムーズにトレースしますが、回避運動の精度が落ち、目標座標までたどり着けなくなるケースも出てくるかもしれません。(onspot)により、回避運動の有無を指定できます。trueで(maxrot)に応じた回避運動をします。falseなら回避せず静止します。 このアプローチは付近の情報しか見ないので注意してください。付近の情報のみで回避できるのであれば良いですが、迷路のような障害物を通り抜けることは通常失敗します。

以下の機能はレジスト制限されています。

そのつど判断しながらパス設計する関数

  • mp_linear_path(path,xg,yg,stepsize,checkall) - 直線的にパスを設計する。失敗すると、途中でパスが終了する。
    • 戻り値: パス設計に成功/失敗(true/false)
    • 引数:
      • (path) : 設計したパスを登録するパスindex
      • (xg,yg) : 目標座標
      • (stepsize) : パスのステップ間隔
      • (checkall) : 障害物判定するオブジェクトの種類を設定する
              	false :solid属性のみ判定
              	true  :すべてに判定
  • mp_potential_path(path,xg,yg,stepsize,checkall,factor) - 障害物を回り込んで回避しながらパスを設計する(mp_potential_settingで設定できる)。失敗すると、途中でパスが終了する。
    • 戻り値: パス設計に成功/失敗(true/false)
    • 引数:
      • (path) : 設計したパスを登録するパスindex
      • (xg,yg) : 目標座標
      • (stepsize) : パスのステップ間隔
      • (checkall) : 障害物判定するオブジェクトの種類を設定する
               false :solid属性のみ判定
               true  :すべてに判定
      • (factor) : パスの許容長さ(=始点?終点の距離のfactor倍)を設定

グリッドベース・アプローチ(The grid-based approach)

(概要)
グリッドを使ったアプローチ(アルゴリズムともいわれます)を用いることでより複雑なメカニズムを作ることが出来ます。これにより、より短距離のパス設計が出来ますが、要求スペックも上がってしまうという欠点もあります。このメカニズムの概要は以下のようになります。まず、ルーム内のパスで利用する範囲に、任意の大きさのグリッドを生成します。(細かいと処理が遅くなります) 次に、それぞれのマス目内に指定したオブジェクトの有無をチェックし、あれば通れないマス目として記録していきます。つまり、一部でも通れない部分があるとそのマス目は通れないと判定します。最後に、始点と終点を設定し、グリッド情報から最短経路を導き出します。パスは移動させるオブジェクトが通れるように設定されます。この通れる隙間が十分であれば、パス設計が可能というわけです。こうすることで、インスタンスを適切に導くことが出来るようになります。
グリッドを使ったアプローチは、とても強力です。(プロが作ったゲームにも良く用いられています)しかし、どのくらいのマス目のサイズにするか、また、チェック機構を正確な当たり判定で行うかどうか、よく考えないといけません。これらの要素は、このアプローチでは強く影響します。特にマス目の大きさは重要です。マス目の中心座標と、動いているオブジェクトの基点座標を一致させた時に、完全にそのオブジェクトがマス目内部に収まるようにしなければならないことに注意してください。(オブジェクトの基点座標に注意してください。もしオブジェクトの基点座標がオブジェクトの中心でない場合は、パスがずれることになります!) 一方セルを小さくすると、導けるパスが多くなります。マス目を大きくしすぎると、通れないと判定されるマス目ばかりになり、パス設計ができなくなるかもしれません。

グリッドを使ったアプローチに関する関数

  • mp_grid_create(left,top,hcells,vcells,cellwidth,cellheight) - 指定した位置に任意の大きさのグリッドを生成する。
    • 戻り値 : グリッドのindexを返す。
    • 引数:
      • (left,top) : グリッド全体の左上座標。
      • (hcells) : 横方向のマス目の数
      • (vcells) : 縦方向のマス目の数
      • (cellwidth) : 1つのマス目の横幅
      • (cellheight) : 1つのマス目の縦幅

以下、引数(id)はグリッドのインデックスを示す。

  • mp_grid_destroy(id) - グリッドを破棄する。不要になったら呼び出すようにすること。
  • mp_grid_clear_all(id) - グリッド内のすべてのマス目の壁判定をクリアする。
  • mp_grid_clear_cell(id,h,v) - グリッド内の指定したマス目(h,v)の壁判定をクリアする。左上のマス目は(0,0)。
  • mp_grid_clear_rectangle(id,left,top,right,bottom) - グリッド内の指定した矩形範囲内にあるマス目の壁判定をクリアする。範囲はルーム座標で指定する。
  • mp_grid_add_cell(id,h,v) - グリッド内の指定したマス目(h,v)に壁判定をつける。左上のマス目は(0,0)。
  • mp_grid_add_rectangle(id,left,top,right,bottom) - グリッド内の指定した矩形範囲内にあるマス目の壁判定をクリアする。範囲はルーム座標で指定する。
  • mp_grid_add_instances(id,obj,prec) - グリッド内に指定したオブジェクトを含むすべてのマス目に壁判定をつける。
    • 引数:
      • (obj) : オブジェクトindexまたは特定のインスタンスid。予約語の使用も可。
      • (prec) : 正確な当たり判定の指定(true/false) スプライトでpreciseにチェックされている場合のみ機能する。
  • mp_grid_path(id,path,xstart,ystart,xgoal,ygoal,allowdiag) - グリッドのパスを設計する。パスの設計に成功した時にtrueを返す。
    • 引数:
      • (path) : 設計したパスを登録するパスindex。カレントインスタンスのパスに設定するわけではない。
      • (xstart,ystart) : パスの開始座標
      • (xgoal,ygoal) : パスの終点座標
      • (allowdiag) : 斜め移動を許可するか指定する(trueで斜め移動許可)
  • mp_grid_draw(id) - グリッド内の情報を描写する(壁判定有:赤 無:緑)。 処理が遅いので、デバッグ用として使用すること。

当たり判定

当たり判定に関する関数

共通事項>>

  • 戻り値 : 干渉するインスタンスのid、干渉しなかった場合は負の値
    • (obj) : オブジェクト名またはインスタンスid、予約語:"All"のいずれか
    • (prec) : trueの場合、正確な当たり判定を行う
    • (notme): trueの場合、自分自身を干渉対象にしない
  • collision_point(x,y,obj,prec,notme) - 定点(x,y)に干渉するか調べる。
  • collision_rectangle(x1,y1,x2,y2,obj,prec,notme) - (x1,y1)-(x2,y2)の矩形範囲に干渉するか調べる。
  • collision_circle(xc,yc,radius,obj,prec,notme) - 中心を(xc,yc)、半径を(radious)とした円範囲に干渉するか調べる。
  • collision_ellipse(x1,y1,x2,y2,obj,prec,notme) - (x1,y1)-(x2,y2)で作られる楕円の範囲に干渉するか調べる。
  • collision_line(x1,y1,x2,y2,obj,prec,notme) - 2点(x1,y1)-(x2,y2)の線分に干渉するか調べる。

インスタンス

インスタンスのローカル変数

  • object_index -* インスタンスのオブジェクトindex。*この値は読み取り専用である。
  • id -* インスタンスの固有の識別番号。(>=100000) *この値は読み取り専用である。
  • mask_index - 当たり判定を行うためのマスクのスプライトindex。当たり判定を表示するスプライトと同じにする場合は-1。
  • solid - ソリッド属性にするか設定する。
  • persistent - 処理が別のルームに移ったとき状態を保つかどうか設定する。

インスタンスに関するグローバル変数

  • instance_count -* ルーム内に存在するインスタンスの数。*この値は読み取り専用である。
  • instance_id[0..n-1] -* インスタンスidの配列。nは現在のルーム内のインスタンス数を表す。番号とidの割り当ては毎ステップ更新されるので注意。*この値は読み取り専用である。

インスタンスidに関する関数

  • instance_find(obj,n) - (obj)の種類のなかで(n+1)番目のインスタンスidを返す。(obj)が存在しない場合は、特殊値 nooneを返す。instance_id[]と同様に番号とidの割り当ては毎ステップ更新される。
  • instance_exists(obj) - (obj)のインスタンスが存在するかどうか返す。(obj)にはインスタンスid、予約語:"All"が使用できる。
  • instance_number(obj) - 存在する(obj)のインスタンス数を返す。(obj)には予約語:"All"が使用できる。
  • instance_position(x,y,obj) - (x,y)に存在する(obj)のインスタンスidを返す。重なっていた場合、id番号の小さいものを返す。(obj)には予約語:"All"が使用できる。存在しない場合、特殊値 nooneを返す。
  • instance_nearest(x,y,obj) - (x,y)に最も近い(obj)のインスタンスidを返す。(obj)には予約語:"All"が使用できる。
  • instance_furthest(x,y,obj) - (x,y)から最も遠い(obj)のインスタンスidを返す。(obj)には予約語:"All"が使用できる。
  • instance_place(x,y,obj) - (x,y)にカレントインスタンスを配置したときに、重なった(obj)のインスタンスidを返す。(obj)には予約語:"All"が使用できる。存在しなかった場合、特殊値 nooneを返す。

インスタンスの生成、破棄に関する関数

  • instance_create(x,y,obj) - (x,y)に(obj)のインスタンスを生成する。戻り値は、生成されたインスタンスid。
  • instance_copy(performevent) - カレントインスタンスのコピーを生成する。引数は、コピーインスタンスにCreateイベントを送るか設定する。戻り値は、新しく生成したインスタンスid。
  • instance_destroy() - カレントインスタンスを破棄する。
  • instance_change(obj,perf) - カレントインスタンスのオブジェクトを(obj)に変化させる。(perf)はestoryイベント、createイベントを送るか指定する。
  • position_destroy(x,y) - (x,y)に位置しているインスタンスをすべて破棄する。
  • position_change(x,y,obj,perf) - (x,y)に位置しているインスタンスをすべて(obj)に変化させる。(perf)でdestoryイベント、createイベントを送るか指定する。

インスタンスの動作/停止 (アクティベーション)

(注意)
停止状態にしたインスタンスは処理系からはずされ、イベント処理を行わなくなるばかりか、例えば他のインスタンスによって破棄しようとしても破棄されなくなります。 良くあるミスは、動作状態にさせるためのインスタンスさえも停止状態にしてしまうことです。停止状態を実行したインスタンス自身は保護されるように関数を使用するべきです。


インスタンスの動作/停止(アクティベーション)に関する関数

  • instance_deactivate_all(notme) - ルーム内すべてのインスタンスを停止させる。(notme)=trueで呼び出し側のインスタンスは停止しない。
  • instance_deactivate_object(obj) - (obj)であるすべてのインスタンスを停止させる。(obj)にインスタンスid、予約語:"All"を使用できる。
  • instance_deactivate_region(left,top,width,height,inside,notme) - 左上の座標(top,left)から横幅(width)、縦幅(height)の矩形範囲に対する処理を行う。(inside)=falseで矩形範囲外のインスタンスを停止させる。(notme)=trueで呼び出し側は停止しない。
  • instance_activate_all() - ルーム内のすべてのインスタンスを動作状態にする。
  • instance_activate_object(obj) - (obj)であるすべてのインスタンスを動作状態にする。(obj)にインスタンスid、予約語:"All"を使用できる。
  • instance_activate_region(left,top,width,height,inside) - 左上の座標(top,left)から横幅(width)、縦幅(height)の矩形範囲に対する処理を行う。(inside)=falseで矩形範囲外のインスタンスを動作状態にする。

タイミング(時間)

時間に関するグローバル変数

  • room_speed - 現在のルームのスピード。1秒間に処理するステップ数。

※以下はすべて読み取り専用である。

  • fps -* 一秒間に表示するフレーム数。
  • current_time -* ゲーム開始から経過したミリセカンド。
  • current_year -* 現在の年。西暦。
  • current_month -* 現在の月。
  • current_day -* 現在の日付。
  • current_weekday -* 現在の曜日(日=1?土=7)
  • current_hour -* 現在の時間。
  • current_minute -* 現在の分。
  • current_second -* 現在の秒。

実行を停止する関数

  • sleep(number) - 実行停止する時間をミリセカンドで指定する。

タイミングに関する変数

  • alarm[0..7] - 0?7番のアラームにアクセスする。代入したステップ数後にカレントインスタンスに対してアラームイベントを発生させる。
  • timeline_index - カレントインスタンスに設定するタイムラインのindex。タイムラインカテゴリで設定したものを用いる。-1で解除する。
  • timeline_position - タイムラインの現在の位置。飛ばしたり、繰り返すときにこの値を変更する。
  • timeline_speed - タイムラインのスピード。デフォルト値(=1)で1ステップ毎に処理する。遅くしたければ0.5などを指定する。

ルームとスコア


ルーム処理に関するグローバル変数および関数

  • room_first -* ゲーム最初のルームindex。*この値は読み取り専用である。
  • room_last -* 最終ルームのindex。*この値は読み取り専用である。
  • room_goto(numb) - (numb)indexのルームに処理を移動する。
  • room_goto_previous() - 前のルームに処理を移動する。
  • room_goto_next() - 次のルームに処理を移動する。
  • room_restart() - 現在のルームをリスタートする。
  • room_previous(numb) - 現在のルームより(numb)前のルームindexを取得する。存在しない場合は-1を返す。処理は移動しない。
  • room_next(numb) - 現在のルームより(numb)後のルームindexを取得する。存在しない場合は-1を返す。処理は移動しない。
  • game_end() - ゲームを終了する。
  • game_restart() - ゲームをリスタートする。

ルームに情報に関するグローバル変数

  • room_width -* ルームの横幅。
  • room_height -* ルームの縦幅。
  • room_caption - ルームのキャプション。ウィンドウキャプションに表示する。
  • room_persistent - 現在のルームを保持するか指定する。

セーブとロード

  • game_save(string) - (string)でファイル名を指定してセーブする。
  • game_load(string) - (string)でファイル名を指定してロードする。

スコアに関するグローバル変数

  • score - 現在のスコア。
  • lives - 現在のライフ。主に残機等に用いる。
  • health - 現在のヘルス。主にキャラクタの体力等に用いる。
  • show_score - ウィンドウキャプションにスコアを表示するか指定する。
  • show_lives - ウィンドウキャプションにライフを表示するか指定する。
  • show_health - ウィンドウキャプションにヘルスを表示するか指定する。
  • caption_score - スコアキャプションを設定する。
  • caption_lives - ライフキャプションを設定する。
  • caption_health - ヘルスキャプションを設定する。

イベント処理

イベントに関する関数

event_perform(type,number) - カレントインスタンスに(type)で示すイベントを発生させる。(number)の扱いは(type)によって変わる。

  • (type)は以下の値を用いることが出来る。
    • ev_create 生成
    • ev_destroy 破棄
    • ev_step 毎ステップ
    • ev_alarm アラーム
    • ev_keyboard キーボードを押した時
    • ev_mouse マウス/ジョイスティック等を押した時
    • ev_collision 衝突
    • ev_other その他
    • ev_draw 描画
    • ev_keypress キーが押されている時
    • ev_keyrelease キーが離された時
  • 各(type)に対応する(number)の扱いは以下の通りである。
    • ev_alarm 対応するアラーム番号を指定する。(0-7)
    • ev_keybord キーコードを指定する。
    • ev_keypress 同上
    • ev_keyrelease 同上
    • ev_mouse 以下の値を利用できる。
      • ev_left_button
      • ev_right_button
      • ev_middle_button
      • ev_no_button
      • ev_left_press
      • ev_right_press
      • ev_middle_press
      • ev_left_release
      • ev_right_release
      • ev_middle_release
      • ev_mouse_enter
      • ev_mouse_leave
      • ev_global_press
      • ev_global_release
      • ev_joystick1_left
      • ev_joystick1_right
      • ev_joystick1_up
      • ev_joystick1_down
      • ev_joystick1_button1
      • ev_joystick1_button2
      • ev_joystick1_button3
      • ev_joystick1_button4
      • ev_joystick1_button5
      • ev_joystick1_button6
      • ev_joystick1_button7
      • ev_joystick1_button8
      • ev_joystick2_left
      • ev_joystick2_right
      • ev_joystick2_up
      • ev_joystick2_down
      • ev_joystick2_button1
      • ev_joystick2_button2
      • ev_joystick2_button3
      • ev_joystick2_button4
      • ev_joystick2_button5
      • ev_joystick2_button6
      • ev_joystick2_button7
      • ev_joystick2_button8
    • ev_collision otherオブジェクトのインデックスとして指定できる。
    • ev_other 以下の値を指定して、イベントの種類を指定する。
      • ev_outside
      • ev_boundary
      • ev_game_start
      • ev_game_end
      • ev_room_start
      • ev_room_end
      • ev_no_more_lives
      • ev_no_more_health
      • ev_animation_end
      • ev_end_of_path
      • ev_user0
      • ev_user1
      • ev_user2
      • ev_user3
      • ev_user4
      • ev_user5
      • ev_user6
      • ev_user7
    • ev_step ステップイベントの場合、次の3つから選ぶ。
      • ev_step_normal
      • ev_step_begin
      • ev_step_end
  • event_perform_object(obj,type,number) - (obj)で示すオブジェクトに定義されている(type)と同類のイベント処理を実行する。(type)イベントを(obj)に送るものではないことに注意。
  • event_user(number) - (number)で指定した番号(0?7)のユーザーイベント処理を実行する。
  • event_inherited() - 親オブジェクトで定義している(現在のイベントと同類の)イベント処理を実行する。オブジェクトに親オブジェクトを定義している場合のみ有効。

イベントに関するグローバル変数 (*以下はすべて読み取り専用である)

  • event_type -* 現在行っているイベントタイプ。
  • event_number -* 現在実行しているイベントの数。
  • event_object -* 現在のイベントが行われているオブジェクトindex。
  • event_action -* 現在行われているアクションのindex。

その他の変数、関数について


エラー処理やデバッグに関するもの

  • error_occurred - エラーが生じたかどうか示す。
  • error_last - 最新のエラーメッセージの文字列。
  • show_debug_message(str) - デバッグモード時に文字列をダイアログ表示する。

変数に関する関数

※(name)は文字列で与える これらは、変数の文字列を変化させながら行う処理で利用できる。

  • variable_global_exists(name) - (name)で示すグローバル変数名があるかどうか返す。
  • variable_local_exists(name) - カレントインスタンス内に(name)で示すローカル変数名があるかどうか返す。
  • variable_global_get(name) - (name)で示すグローバル変数名の値を取得する。
  • variable_global_array_get(name,ind) - (name)で示すグローバル変数名の配列で、(ind)番目の値を取得する。
  • variable_global_array2_get(name,ind1,ind2) - (name)で示すグローバル変数名の2次元配列で、(ind1,ind2)の値を取得する。
  • variable_local_get(name) - (name)で示すローカル変数名の値を取得する。
  • variable_local_array_get(name,ind) - (name)で示すローカル変数名の配列で、(ind)番目の値を取得する。
  • variable_local_array2_get(name,ind1,ind2) - (name)で示すローカル変数名の2次元配列で、(ind1,ind2)の値を取得する。
  • variable_global_set(name,value) - (name)で示すグローバル変数名に、(value)を代入する。
  • variable_global_array_set(name,ind,value) - (name)で示すグローバル変数名の配列で、(ind)番目に(value)を代入する。
  • variable_global_array2_set(name,ind1,ind2,value) - (name)で示すグローバル変数名の2次元配列で、(ind1,ind2)に(value)を代入する。
  • variable_local_set(name,value) - (name)で示すローカル変数名に、(value)を代入する。
  • variable_local_array_set(name,ind,value) - (name)で示すローカル変数名の配列で、(ind)番目に(value)を代入する。
  • variable_local_array2_set(name,ind1,ind2,value) - (name)で示すローカル変数名の2次元配列で、(ind1,ind2)に(value)を代入する。

プログラム優先度に関する関数

  • set_program_priority(priority) - ゲームプログラムの優先度を設定できる(-3?+3)。 優先度を高くするとWindowsに支障をきたす場合があるので注意。

Wiki内検索

#search(): You already view a search box

MENU

ドキュメント

GMLリファレンス

2ch

その他



最新の30件

2017-11-07 2017-10-26 2017-10-01 2017-05-13 2016-10-01 2017-01-22 2017-01-14 2016-12-25 2016-10-09 2016-09-25 2016-09-21 2016-08-29 2016-06-21 2016-02-23 2016-02-10 2016-01-18 2015-10-30 2015-10-20 2015-06-23 2015-06-20 2015-06-19 2015-06-10 2015-06-09 2015-06-07 2015-06-05 2015-06-03

人気の10件

今日の10件



これまでの訪問者: 7931
今日の訪問者: 5
昨日の訪問者: 4
閲覧者: 3