Tweenアニメーションで制御されたオブジェクトを参照するには、TweenEventでtarget.objを参照する事で制御されたオブジェクトを参照する事ができます。
ソースコード
//sample_mcのアルファ値を一秒かけて0から1に
my_tw=new Tween(sample_mc,"alpha",None.easeInOut,0,1,1,true)
//トゥイーンイベント終了後に「getObj」メソッドにアクセス
my_tw.addEventListener(TweenEvent.MOTION_FINISH, getObj);
}
function getObj(evt:TweenEvent)
{
trace(evt.target.obj)//制御されたオブジェクト「sample_mc」を参照
}

2008年06月25日
2007年12月10日
Tweenアニメーションを配列を経由して行う

Tweenアニメーションを確実に完了するにはTweenオブジェクトを配列に格納します。以前は。Tweenアニメーション実行後に配列にpushしていたのですが、あらかじめグローバルなTweenオブジェクトを配列に格納し、配列を経由してTweenアニメーションを実行する事で、アニメーション定義後の配列への代入、アニメーション完了後に配列の削除の処理を定義しなくてもTweenのアニメーションを円滑に行う事ができると思います。30回ほど試した所、配列を介さない、Tweenは4回ほど止まり、配列を経由したTweenアニメーションは一度も停止していません。
この配列にあらかじめTweenオブジェクトを定義し、配列を経由してTweenを完了する事が出来ることが確定したらエンジンの保持用配列関係の処理を書き換えます。
例題
Tweenオブジェクトを複数用意。
Tween実行用の配列を生成。
最初に生成したTweenオブジェクトをTween実行用の配列の[0]に代入。
Tweenを実行する関数にアクセス。
関数内で、配列を経由してTweenを実行。
そのほかにふたつその場で生成したTweenオブジェクトでアニメーションを実行。
結果
何回か試すと、その場で生成したTweenは停止することはありましたが、配列を経由して実行したTweenはTweenの停止がない(完全な確定要素ではない)
import fl.transitions.*;
import fl.motion.easing.*;
import flash.utils.*;
var twn1:Tween
var twn2:Tween
var sample_arr:Array=new Array();
sample_arr[0]=twn1;
sample_arr[1]=twn2;
getTw();
function getTw()
{
sample_arr[0]=new Tween(sample1_mc,"alpha",Quadratic.easeInOut,1,0,10,true);//保持している
var getTw:Tween=new Tween(sample2_mc,"alpha",Quadratic.easeInOut,1,0,10,true);
var get3Tw:Tween=new Tween(sample3_mc,"alpha",Quadratic.easeInOut,0,1,10,true);
}
2007年12月08日
Tweenアニメーションが途中で止まる問題を解決。

Tweenが途中で止まってしまう問題を解決。
Tweenオブジェクトをnewで生成した後に配列に格納する事でTweenオブジェクトをガベージコレクタの対象から外す事ができました。
例題
sample_mcを1秒かけてフェードインするTweenオブジェクトを生成。
Tweenオブジェクトを配列に格納する(これでガベージコレクタの対象から外れる)。
TweenEvent.MOTION_FINISHでアニメーション完了後の処理を定義。アニメーション完了後の関数でTween保持用の配列を初期化する。
ch_tw=new Tween(sample_mc,"alpha",Quadratic.easeInOut,0,1,1,true);
chTw_arr.push(ch_tw);//配列にTweenオブジェクトを格納
ch_tw.addEventListener(TweenEvent.MOTION_FINISH, faidFinish);
//フェードインが完了
function faidFinish(evt:TweenEvent)
{
chTw_arr=new Array();//Tween保持用配列の初期化
}
この様にTweenオブジェクトを配列に格納し、Tweenオブジェクトを保持する事でガベージコレクタの対象から外れ、最後までTweenアニメーションを実行する事ができます。
結論 Tweenオブジェクトは生成した後に終了まで配列に格納しておく。
2007年12月07日
Tweenアニメーションが途中で止まってしまう。

tweenで定義したアニメーションがなぜか途中で止まります。
var twn:Tween;
twn=new Tween(sample_arr[i], "alpha", Quadratic.easeInOut, 1, 0, 3, true);
上記の処理は1秒かけてオブジェクトをフェードインさせる処理ですがと途中でとまってしまいう時があります。
アニメーションが止まる事なく完了する事もあるですが、数回に一回位アルファが1に達せず半透明のままtweenアニメーションが停止してしまう事がありました。
この原因はガベージコレクタにありました。
Tweenオブジェクトはは弱い参照が指定されてしまうためガベージコレクタ(削除)の対象になるようです。
Tweenがアニメーションを実行している途中でにガベージコレクタがTweenオブジェクトを消去しまう模様。
これはTweenオブジェクトをガベージコレクタの対象にならないように
構築すれば回避できると思います。
今からこの問題を回避しTweenでアニメーションを完了させるために色々試してみます。
2007年12月06日
tweenクラスの基礎
最適化中。
エンジンのフェード関係の処理に使用するtweenクラスの基礎。
引数が多いですが慣れれば使うのは非常に簡単です。
第一引数に オブジェクト名,
第二引数に操作する値(alphaやx等)
第三引数にトゥイーンの形式(徐々に早くしたり、遅くしたり)
第4引数に初期値(トゥイーンが始まるまえの値)
第5引数に目標値(トゥイーンが終了した時の値)
第6引数にトゥイーンにかかる時間
第7引数にトゥイーンの時間単位(trueで秒、falseでタイムラインフレーム単位)
例えば
var ch_tw:Tween = new Tween(sample_mc, "alpha", Quadratic.easeInOut, 0, 1, 2, true);
とあった場合。これは「sample_mc」の,「alpha」の値を,「Quadratic.easeInOut」というトゥイーン形式行う,初期のアルファの値は「0」,tween終了時の値は「1」,tweenが始まって終了するまでの値は「2秒」,計算時間は「秒」単位で行う。
という意味です。
例題
sample_mcを2秒かけてフェードインする。
フェードインが終了するとイベントを通知する。
import fl.transitions.*;
import fl.motion.easing.*;
import flash.utils.*;
var ch_tw:Tween = new Tween(sample_mc, "alpha", Quadratic.easeInOut, 0, 1, 2, true);//1 操作対象 sample_mc, 2alphaを操作, 3 easeOut後半早くなる形式,4 最初のalphaは0, 5 Tweenアニメーションの目標となる値 1,6 tween
にかかる時間 2, 7 trueで秒数単位で換算
ch_tw.addEventListener(TweenEvent.MOTION_FINISH, finishTween);
//Tween終了のイベントハンドラ
function finishTween(evt:TweenEvent):void {
trace("tween処理終了");
}
エンジンのフェード関係の処理に使用するtweenクラスの基礎。
引数が多いですが慣れれば使うのは非常に簡単です。
第一引数に オブジェクト名,
第二引数に操作する値(alphaやx等)
第三引数にトゥイーンの形式(徐々に早くしたり、遅くしたり)
第4引数に初期値(トゥイーンが始まるまえの値)
第5引数に目標値(トゥイーンが終了した時の値)
第6引数にトゥイーンにかかる時間
第7引数にトゥイーンの時間単位(trueで秒、falseでタイムラインフレーム単位)
例えば
var ch_tw:Tween = new Tween(sample_mc, "alpha", Quadratic.easeInOut, 0, 1, 2, true);
とあった場合。これは「sample_mc」の,「alpha」の値を,「Quadratic.easeInOut」というトゥイーン形式行う,初期のアルファの値は「0」,tween終了時の値は「1」,tweenが始まって終了するまでの値は「2秒」,計算時間は「秒」単位で行う。
という意味です。
例題
sample_mcを2秒かけてフェードインする。
フェードインが終了するとイベントを通知する。
import fl.transitions.*;
import fl.motion.easing.*;
import flash.utils.*;
var ch_tw:Tween = new Tween(sample_mc, "alpha", Quadratic.easeInOut, 0, 1, 2, true);//1 操作対象 sample_mc, 2alphaを操作, 3 easeOut後半早くなる形式,4 最初のalphaは0, 5 Tweenアニメーションの目標となる値 1,6 tween
にかかる時間 2, 7 trueで秒数単位で換算
ch_tw.addEventListener(TweenEvent.MOTION_FINISH, finishTween);
//Tween終了のイベントハンドラ
function finishTween(evt:TweenEvent):void {
trace("tween処理終了");
}
2007年12月05日
最適化に使うtweenクラスの処理をメモ
フェード処理の最適化のための処理、tweenクラスの基本文法をメモ。
Timerクラスで行っていたエンジンのフェード処理部分の大半を書き換えそう。
でもかなり処理速度は上がりそう。
var twn:Tween = new Tween(sample_arr[i], "alpha", Quadratic.easeInOut, 0, 1, 2, true);
Timerクラスで行っていたエンジンのフェード処理部分の大半を書き換えそう。
でもかなり処理速度は上がりそう。
var twn:Tween = new Tween(sample_arr[i], "alpha", Quadratic.easeInOut, 0, 1, 2, true);






