やっと「そうめん」触ったよ(4) -スレッド間連携(受取篇)-
2008/10/27 21:23 - AS3.0
前回は、「そうめん」によるプロジェクトでは、ドキュメントクラスが Sprite 継承の Main と Thread 継承の MainThread の二段構えになっており、事実上のドキュメントクラスは最初に読み込まれる Main ではなくむしろ MainThread であるということをみました。
そして MainThread から各種スレッドクラスが次々と呼び出され、いろいろな処理がシーケンシャルにおこなわれていくのが「そうめん」の流儀であることもみました。
ドキュメントクラスは Sprite もしくは MovieClip を継承しなければならないという制約がありますね。 しかしスレッドクラスの全ての祖となる Thread.as はそのいずれも継承していません。 それが Main と MainThread の二段構えにせざるを得ない理由なのでしょう。
話は変わりますが、プログラムでは表示オブジェクトを作ることがしばしばあります。 その場合、コンテナとなる表示オブジェクトが必要になるのは今さら言うまでありません。 ちなみに私は特に理由がない限り、ドキュメントクラスにその機能を担わせます。
「そうめん」プロジェクトでは、表示オブジェクトの生成は Main がおこなうのではなく、MainThread およびそれより下層のスレッドクラスでおこなうことになるわけですが、ではその表示オブジェクトのコンテナである Main をスレッドクラスにどうやって認識させるのか。
Main から MainThread を呼び出すときに、Main 自身を MainThread の引数とするのが作法のようです。 以下のような書き方ですね。
var main:MainThread = new MainThread(this);
で、それを受ける MainThread の方はどういう体勢になっているかというと、まずメンバプロパティとして引数となるオブジェクトを記述しておきます。 そしてコンストラクタで引数をメンバプロパティと等号で結びつけます。 以下のような感じ。
private var container:Sprite; public function MainThread(container:Sprite) { this.container = container; }
Thread を継承したクラスが外部から何らかのオブジェクトを受け取りたい場合は、このようにメンバプロパティとコンストラクタのコンボでおこなうのが「そうめん」の流儀のようです。
このコンボを繰り返せば、子スレッド、孫スレッドとどんどん受け渡すことも可能。
上記の例は Main と MainThread の間での話でしたが、スレッドとスレッドの間でも同様な記法でおこなえば良いのでしょう。
では逆に、あるスレッドが内部で生成したオブジェクトを、外へ引き渡したい場合はどうするのか、というのが 次回の話題。