![]()
2011.09.30 Kikuchi
2011.08.08 takaiw
2011.07.01 knockknock
2011.05.17 Naoki Muramatsu
2011.05.02 knockknock
![]()
![]()
Naoki Muramatsu (1件) Twitter:@Stryfy.
deco-dekai (1件)
ビートダウンパートでご飯何杯も食べられます。
ハードコア・テクニカルディレクターを目指して日々精進。
yanbou (6件)
犬と猫で、家が毎日運動会のフラッシュデベロッパー。
ビールから発泡酒へ変更で節約中。
chikatherrsix (8件) メタル界のフラッシュデベロッパー。またある時はメタルギタリスト。オーサリング中もヘッドバンギングは絶やさない。
akuze (2件)
2003年からユナイティアに寄生しているフラッシュデベロッパー。
シルクドソレイユとカナダが好き。
knockknock (16件)
小遣い2万円のフラッシュデベロッパー。
帰りが遅いのにキレる嫁をだましだまし制作中・・・。
takaiw (18件) フラッシュデベロッパー。遊びでゲームを作るのも好きです。外見に似合わないイラストを描くのも好きです。とにかく作るのが好きです。
![]()
HOME > ThreadLibraryを使ってみた。
初めまして。初投稿となります。Kikuchiです。
まだまだ新米ですが。頑張っていきたいと思います。
で、今回はActionScript3のライブラリで、Spark projectさんの公開している
ThreadLibrary1.0を使ってみました。
ThreadLibrary1.0
そもそもどんなライブラリなのかというと、
Threadというものが元々同期的な物で、AS3でできるだけイベントのことを考えないで同期的にコードが書けるよ!ってライブラリのようです。
元々Javaを勉強していた身としてはThreadと聞いて早々に飛びついてしまいました。
売りに「イベントリスナーにさようなら」とあるので一先ずイベントを一切使わずに
画像をロードして表示する簡単なFlashを作ってみよう。と言うことで作ってみました。
まずは、ドキュメントクラスでThreadの初期化をします。
引数ですが、EnterFrameThreadExecuterとIntervalThreadExecuterがありまして
名前の通り、フレーム実行か、指定間隔でスレッドを実行するというものです。
Thread.initialize(new EnterFrameThreadExecutor());
メインのThreadクラスです。 Threadをextendsして、runというfunctionをオーバーライドします。 ここらへんもJavaを真似てますね。 runが実行関数になるのですが、基本的に直接呼ぶことはありません。
public class MainThread extends Thread {
private var _threadFirst:ChildThread = new ChildThread();
private var _image:Bitmap;
private var _displayContainer:DisplayObjectContainer;
public function MainThread(container:DisplayObjectContainer) {
_displayContainer = container;
}
override protected function run():void {
_threadFirst.start();
_threadFirst.join();
}
override protected function finalize():void {
_image = _threadFirst.getImage();
_displayContainer.addChild(_image);
}
}
ついでにfinalizeもオーバーライドしておきます。終了処理ですね。
ここでThreadのキモとなるfunctionですが、
sleep(); join(); start(); next();があります。
おまけにThreadStateなんていうクラスもあって、その時その時のThreadの状態が参照できます。
次に子クラスです。
public class ChildThread extends Thread
{
private var _loader:LoaderThread = new LoaderThread(new URLRequest("image.png"));
private var _image:Bitmap;
override protected function run():void {
_loader.start();
_loader.join();
next(_execute);
}
private function _execute():void {
_image = Bitmap(_loader.loader.content);
}
override protected function finalize():void {
}
public function getImage():Bitmap {
return _image;
}
}
Threadクラスの中でThreadクラスを実行している場合、先に子スレッドが実行されます。こんな所でしょうか。
簡単なソースな上に完成品は画像が張り付いているだけなので割愛します。
ではまた!

Kikuchi