ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

ActionScript LoungeコミュのそうめんのSerialExecutorで関数を連続呼び出しするには

  • mixiチェック
  • このエントリーをはてなブックマークに追加
スレッドライブラリ「そうめん」を使おうとしています。

SerialExecutorの addThread()は Threadクラスを継承したインスタンスを
登録して使いますが、インスタンス内の関数を指定して
連続実行する方法というのはありますでしょうか。

testThread.methodA() を実行
→1秒待機
testThread.methodB() を実行
→1秒待機

といったことができればと思います。

以前 FuseKitを使っていた時に

fuse.push(
[
 {scope:testThread, func:methodA, delay:1000},
],
[
 {scope:testThread, func:methodB, delay:1000},
]
);
といったことをやっていたので、そのような使い方ができればと思っています。

コメント(3)

「そうめん」を利用したことがないので、ライブラリ内に使えるメソッドがあるかどうかはわかりかねます。ただ、スクリプトを書けば済みそうに思えます。

// フレームアクション
// *全角スペースのインデントに注意
var methods_array:Array;
var myTimer:Timer;
var myMethod:Function;
function xDoLater(my_array:Array):void {
 var oMethod:Object = my_array.shift();
 methods_array = my_array;
 xSetMethod(oMethod);
}
function xSetMethod(oMethod:Object):void {
 myMethod = oMethod.method;
 myTimer = new Timer(oMethod.delay, 1);
 myTimer.addEventListener(TimerEvent.TIMER, xExecute);
 myTimer.start();
}
function xClearTimer():void {
 if (myTimer) {
  myTimer.removeEventListener(TimerEvent.TIMER, xExecute);
  myTimer = null;
 }
}
function xExecute(eventObject:TimerEvent):void {
 myMethod();
 xClearTimer();
 if (methods_array.length) {
  var oMethod:Object = methods_array.shift();
  xSetMethod(oMethod);
 } else {
  methods_array = null;
  myMethod = null;
  trace("done"); // 確認用
 }
}
// テスト
xDoLater([
 {method:testThread.methodA, delay:1000},
 {method:testThread.methodB, delay:5000}
]);

> fuse.push(
> [
>  {scope:testThread, func:methodA, delay:1000},
> ],
> [
>  {scope:testThread, func:methodB, delay:1000},
> ]
> );
_____
ちょっと文法としておかしい気がします。また、プロパティ値は、文字列ではないのですか?
>Fumioさん
サンプルありがとうございます。
参考にさせていだきます。

連続実行をしたいというのもそうなのですが、
そうめんに Threadインスタンスではなくメソッドを登録できないかという
こともお聞きしたかったので、調べてみるとそちらはどうも出来ないようでした。
さらに調べてみたのですが、
関数をシーケンス処理したいというのであれば Progressionの
SerialListを使った方がいいかもしれないと思い立ちました。

SerialListクラスは Progressionと関係なく独立して使えるようですので、
この方法でやってみたいと思います。


var exList:SerialList = new SerialList ();
exList.addCommand(
 // 処理待ちの必要がある関数
 new Func( methodA ),
 // 処理待ちは不要で、タイミングを少しずつずらして実行させたい関数
 [
  // タイミングを少しずつずらしてメソッドを実行
  new DoTweener( this, {onStart: method1, delay:0.2} ),
  new DoTweener( this, {onStart: method2, delay:0.4} ),
  new DoTweener( this, {onStart :method3, delay:0.6} )
 ],
 // 処理待ちの必要がある関数
 new Func( methodB )
);
exList.execute();

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

ActionScript Lounge 更新情報

ActionScript Loungeのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。