instance_number
説明
この関数は、現在のRoomから、指定オブジェクトのインスタンスの数を返します。
構文
instance_number(obj);
引数
obj | 対象のオブジェクト |
戻り値
Real (実数)
関連リンク
instance_nearest
説明
この関数は、指定した座標から一番近い指定オブジェクトのインスタンスを取得します。存在しない場合はnoone
を返します。
構文
instance_nearest(x, y, obj);
引数
x | X座標 |
y | Y座標 |
obj | 対象のオブジェクト |
戻り値
Real (インスタンスID) 又は, noone
関連リンク
丸い当たり判定をもったプレイヤーの移動処理をつくる
コード
//step event var spd = 5; //移動速度 var r = 5; //当たり判定の半径 var ofs_x = 0; //当たり判定の位置のX軸の補正 var ofs_y = 0; //当たり判定の位置のY軸の補正 //入力状態の取得 var ix = keyboard_check(vk_right) - keyboard_check(vk_left); var iy = keyboard_check(vk_down) - keyboard_check(vk_up); //移動先の計算 var movx = x + ix * spd, movy = y + iy * spd; //壁に埋まってしまう場合は移動先を修正してから座標を反映 while(collision_circle(movx + ofs_x, y + ofs_y, r, obj_wall, false, false) != noone){ movx += -ix; } x = movx; while(collision_circle(x + ofs_x, movy + ofs_y, r, obj_wall, false, false) != noone){ movy += -ix; } y = movy;
解説
keyboard_checkは入力状態をtrue/falseで返すので、それを利用したテクニックです。
GMSでは、trueを1, falseを0として扱うことが出来ます。
この2行で、X方向、Y方向の入力状態を取得することが出来ます。
var ix = keyboard_check(vk_right) - keyboard_check(vk_left); var iy = keyboard_check(vk_down) - keyboard_check(vk_up);
移動先の座標が かべのなかにいる 壁の中の場合、入力方向とは逆方向へ1ずつ修正していきます。
最後にインスタンスに反映します。
while(collision_circle(movx + ofs_x, y + ofs_y, r, obj_wall, false, false) != noone){ movx += -ix; } x = movx; while(collision_circle(x + ofs_x, movy + ofs_y, r, obj_wall, false, false) != noone){ movy += -ix; } y = movy;
もし以下のようなコードに修正すると、コードの見た目はまとまっていますが、壁に対して斜めから侵入した場合、無限ループに陥ります。注意してください。
while(collision_circle(movx + ofs_x, y + ofs_y, r, obj_wall, false, false) != noone){ movx += -ix; } while(collision_circle(x + ofs_x, movy + ofs_y, r, obj_wall, false, false) != noone){ movy += -ix; } x = movx; y = movy;
instance_copy
instance_change
説明
この関数は、インスタンスを別のオブジェクトのインスタンスへと変更します。その際に、変更されるインスタンスの Destroy Event
, Clean Up Event
と新たに設定されるインスタンスの Create Event
を引き起こすかを選択出来ます。
この関数を使用すれば、爆弾を爆発させるといったようなことが出来ます。
構文
instance_change(obj, perf);
引数
obj | 呼び出し元に新たに設定するオブジェクトのインデックス |
perf | Create, Destroy, CleanUp イベントを引き起こすか(True/False) |
戻り値
N/A
関連リンク
instance_deactivate
無効化(deactivate)されたインスタンスは、ゲーム上には存在しないものとして扱われ、再度、有効化(activate)されるまで操作や変更を行うことが出来ません。
無効化された永続インスタンスはRoomの移動を行う前に再度有効化しなければ移動と同時に破棄されてしまいます。 したがって、これらの関数を永続インスタンスに使用すると問題が起きる可能性があるため、十分注意して使用する必要があります。
また各Step(例えばアラームやDrawイベントなど)でインスタンスの無効化を実行することは、ゲームのパフォーマンスに影響を与え、遅延や低速化や重大なエラーを招きますので、十分注意して使用する必要があります。
無効化されたインスタンスはゲーム内に存在しないものとして扱われますが、インスタンスのユニークなIDを使用することでインスタンスの変数にアクセスすることが可能になります。これは無効化されたインスタンスの変更にアクセスすることが出来る唯一の方法です。ただし、 with(object)
, with(instance)
は使用することが出来ません。
インスタンスのアクティブ化,非アクティブ化を行うには以下の関数を使用します。
instance_activate_all | |
instance_activate_object | |
instance_activate_region | |
instance_activate_layer | 指定レイヤー内のインスタンスを全てアクティブ化 |
instance_deactivate_all | |
instance_deactivate_object | |
instance_deactivate_region | |
instance_deactivate_layer | 指定レイヤー内のインスタンスを全て非アクティブ化 |