GScripサンプル: Gプロセスについて(4/7)■Gプロセス間でのデータのやり取りの仕方について
前回少し書きました。
Gプロセス間でデータをやり取りする方法は今のところ2つあります
a) ユニバーサル領域
b) P_FNC_CALL関数
です。
ユニバーサル領域は「Gプロセス間で共有できる情報」に僕が勝手につけた名前です
グローバル変数領域がGプロセス内でしか共有できないので、それらとの違いを明確にする為に言葉を定義しました。定義してあらためて考えてみると、テクスチャ、BGM,サウンドなどの情報(データ)がユニバーサル領域のものであると考えられます。これらはGプロセスで共有されていてアクセス可能だからです。
GScript上でいくつかサンプルのゲームを作っていたら、どうしてもGプロセス間で情報のやり取りが必要になりました。ユニバーサル変数の実装はJavaのハッシュというデータ構造を使って名前(Key)と値をペアにして保存しているだけです
P_FNC_CALL関数は、Gプロセスの名前を指定して別のGプロセスの関数を呼び出すことができます。引数で相手に値を渡したり、戻り値で相手から情報を受け取ったりして、Gプロセス値で情報をやり取り可能です。
注意点があります。グローバル変数、ローカル変数のアドレス、スプライトID、タスクのID、関数(関数値)などはGプロセス固有のものなので別のGプロセスに渡すとその情報は意味を失ってしまいます
◼️識別子
グローバル変数のアドレス
ローカル変数のアドレス
スプライトID
タスクのID
関数(関数値:関数ID)
思い付くものが、これらの5つくらいです(もしかしたら他にもあるかも)
これらを総称(?)して「識別子」と呼んでいます。アドレスはメモリの場所を指し示すものですし、IDはオブジェクト(本体)を指し示すものです。Gプロセス間でやり取りする場合は「識別子」を意識して注意する必要があります。チェックしていないので「プログラマ責任」です
PS
少し違いますがC言語が分かる方なら、この問題は
「ローカル変数のアドレスを関数の戻り値として返してはならない」
という問題と共通している点があるように思います