- 2008-08-12 (火)
- Thread
各所で高評価を得ている「そうめん」は、BeInteractive の yossy さんが作成された、Java のスレッドモデルをベースとした疑似スレッドライブラリとのこと。タスクシステムという感じでもあるらしい。
詳しくは下記サイトを参照した方が早いかも(汗
確かにこれらのサイトに書いてあるように、Flash で非同期処理を行うとソースが乱れまくる。というか、書いている自分自身も後々良く分からない状況になったり…。
で、この「そうめん」を利用すると、コードもすっきりキレイになり、流れが把握しやすくなるらしい。
ただ、何とく便利そうなんだけども、具体的にどう活用するかがピンと来なかったので、まずはどんなもんかを試してみることに。
サンプル
Flash Player Plug-in はこちらからダウンロードする事が出来ます(無料)。
あまり、スレッドを有効利用しているサンプルではない感じではあるのだが…。
でも確かに各所で評価されているように、この「そうめん」を上手く使いこなすと、複雑な処理も効率よく処理できそうな可能性を見出した。
ソースはこちら
全部ソースを載せると長くなりそうなんでポイントを掲載。
▼ドキュメントクラス部分(Main.as)
やっていることは、ステージの設定とメインのスレッド MainThread を実行しているだけ。
public class Main extends Sprite {
public function Main() {
//スレッドライブラリ初期化
if (!Thread.isReady) Thread.initialize(new EnterFrameThreadExecutor());
//ステージ設定
stage.showDefaultContextMenu = false;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
//MainThreadを起動
var MT:MainThread = new MainThread(stage);
MT.start();
}
}
▼メインのスレッド(MainThread.as)
FIVe3D のシーンを配置して、0.2 秒間隔で、3D オブジェクトを生成していく。30個生成したら、メインスレッドは終了。
public class MainThread extends Thread {
private var count:uint = 0;
private var ST:Stage;
private var sc3D:Scene3D;
private var base3D:Sprite3D;
private var sp3D:Sprite3D;
//コンストラクタ
public function MainThread(ST:Stage) {
//ステージ
this.ST = ST;
//シーン設定
sc3D = new Scene3D();
sc3D.x = ST.stageWidth / 2;
sc3D.y = ST.stageHeight / 2;
sc3D.viewDistance = 200;
ST.addChild(sc3D);
}
//開始スレッド
override protected function run():void {
next(make3D);
}
//オブジェクト生成スレッド
private function make3D():void {
//オブジェクト生成
sp3D = new Sprite3D();
with(sp3D) {
graphics3D.beginFill(0xFF9900);
graphics3D.drawRoundRect(-30, -30, 60, 60, 10, 10);
graphics3D.endFill();
flatShaded = true;
}
sc3D.addChild(sp3D);
//MoveThreadを起動
new MoveThread(sp3D).start();
next(waitTime);
}
//待機スレッド
private function waitTime():void {
count++;
sleep(200);
if (count<30) {
next(make3D);
}
}
}
▼ランダム移動のスレッド(MoveThread.as)
3D オブジェクトを Tweener でひらすら動かすだけ。
TweenerThread を利用すると、Tweener の onComplete を使わなくても良いので、ソースがすっきりした感じになる。
public class MoveThread extends Thread {
private var sp3D:Sprite3D;
//コンストラクタ
public function MoveThread(sp3D:Sprite3D) {
this.sp3D = sp3D;
}
//開始スレッド
override protected function run():void {
var tweenerThread:TweenerThread = new TweenerThread(sp3D,{
time:1,
x:250-Math.random()*500,
y:50-Math.random()*100,
z:100-Math.random()*200,
rotationX:180-Math.random()*360,
rotationY:180-Math.random()*360,
rotationZ:180-Math.random()*360,
transition:"easeInOutQuint"
});
tweenerThread.start();
tweenerThread.join();
next(waitTime);
}
//待機スレッド
private function waitTime():void {
sleep(100);
next(run);
}
}
「そうめん」を利用すると、各処理を細かくスレッド化していくことで、好きな時に好きなように実行できるところだろうか。
もう少しいろいろ勉強しなくては…(汗
この記事をブックマークしておく
コメント:0
トラックバック:0
- この記事のトラックバックURL
- http://god.xsrv.jp/__mt/mt-tb.cgi/1328
- トラックバックを受ける記事
- Thread Library (そうめん) の可能性を感じた from 1ka2ka.com Flash & Action Script