Game Maker Language リファレンス > 定数一覧 > スコープ
※定数というよりは、キーワードの色が濃い
特別なキーワードである"other"は2つの異なる使い方をするインスタンス変数です。
ここではそれらの使い方を説明します。
例えばインスタンスの生成であるinstance_create()関数をwithブロックに入れると、otherは自身のインスタンス変数となります。
with (instance_create(x, y, obj_Ball)) { speed = other.speed; // 生成したインスタンスに速さを設定 direction = other.direction; // 生成したインスタンスに方向を設定 }
上記コードは、インスタンス自身の速さと方向を生成したインスタンスに代入しています。(withに指定したオブジェクトは"self"変数に代入されます)
"other"の説明とは直接関係ありませんが、以下の処理は一番近くにある"obj_Ball"インスタンスを破棄します。
with (instance_nearest(x, y, obj_Ball)) { instance_destroy(); // 一番近いインスタンスを破棄する }
下記コードは"obj_ball"の"str"値が自身の"str"より小さければターゲットとする、という記述となります。
var inst; inst = none; with (obj_ball) { if str > other.str inst = id; } if inst != noone target = inst;
衝突イベントは2つのインスタンス同士でのみ発生します。もちろん複数のインスタンスでの複数の衝突検知も考えられますが、GameMaker:Studioでは1on1の基本的な衝突検知を採用しています。そして"other"変数は衝突した相手を表します。
例えばプレイヤーが弾を打ち、それが敵に衝突した場合に弾の種類によって異なるダメージを与えるには以下の様な記述をします。
// ■プレイヤーが弾を発射する処理 var nnn; nnn = instance_create(x, y, obj_Bullet); nnn.damage = 5 + irandom(5); // 弾の威力 nnn.speed = 8; // 弾の速さ nnn.direction = point_direction(x, y, obj_Enemy.x, obj_Enemy.y); // 敵に向かって弾を発射
これにより発射された弾が敵に当たると、敵の衝突イベントが発生します。
// ■敵の衝突イベント hp -= other.damage; // 弾の威力だけHPを減少させる if hp <= 0 instance_destroy(); // HPが0以下なら死亡
"other"変数により弾の威力"damage"を取得し、敵のHPを減らすことができます。HPが0以下になれば敵は死亡します。
さらに敵を倒したことによりプレイヤーの"mana"を回復させ、敵を倒したフラグを送ることも可能です。例は以下のようになります。
other.mana += 10; //add ten to the other instance "mana" variable other.hit = true; //set the other instance variable "hit" to true, creating it if the variable doesn't already exist