「var
」を用いずに宣言した場合にはインスタンス変数となります。
var a;
// ローカル変数としての宣言(宣言のみ)b = 0;
// インスタンス変数としての宣言及び値の代入ローカル変数の場合は宣言だけを先に済まして値の代入は後からということができましたが、インスタンス変数は宣言と同時に値の代入も行う必要があります。そして値が代入された時点でとりあえずの変数型も決定されます。
インスタンス変数の生存期間
インスタンス変数の生存期間はオブジェクト・インスタンスが存在する限り保証されています。言い換えるとインスタンスが破棄されたときにはインスタンス変数も破棄されます。
ローカル変数としての二重宣言に注意
先にインスタンス変数として宣言したけれど、あとから同名でローカル変数として宣言し直すことができてしまうので上書きに注意。名前の重複が無いように管理しないとマズイ。
test = 100;
// インスタンス変数として先に宣言し値代入var test = 99;
// 同名でローカル変数として宣言および代入ができてしまう-
/* 同じブロック内でもう一度スコープを変更したい場合
スコープを付けて再度宣言し直せば良い
global.test = 102;
var test = 103;
self.test = 104;
*/
個人的にはインスタンス変数という呼び方に馴染みがないのだけど、いわゆるC言語
におけるメンバ変数と同じで、所有者(各オブジェクト・インスタンス)がそれぞれ固有の値として持つことのできる変数のこと。
各インスタンスを区別して他オブジェクトのインスタンス変数を参照する必要がある場合には C
や Java
と同じくドット記法を用います。
ドット記法
GML ではドットの左辺には変数の所有者、右辺に変数が来る。
ゲーム開発のために作られた専用のスクリプト言語だけあってドット記法の使い方も一部やや特殊で
self.A
other.B
object.C
self.はインスタンス自身を示す、other.はコリジョンで当たり判定があったオブジェクトなどを示す、object.は指定されたオブジェクトのインスタンス全体を示すなど。
ドット記法におけるドットの意味
ドットの役割は日本語表現だと「の」に相当します。
self.A
→ 自分自身「の」変数A
other.B
→ 他オブジェクト「の」変数B
object.C
→ XXXというオブジェクト名「の」変数C
参考 (YoYoGames):Keywords