2009年5月18日月曜日

Tween が途中で止まってしまう

Tweenクラスを使っていると、途中でとまってしまうことがある。よくわからない現象だったんだけど、どうやら生成した Tween のインスタンスがガベージコレクションに掃除されてしまうのが問題らしい。 生成した Tween インスタンスは、そのままでも動いてくれるが、変数なり何なりに入れておかないと、すぐ掃除されてしまう様子。
new Tween(ball, 'x', Regular.easeOut, ball.x , 300, 100, false);
new Tween(ball, 'y', Regular.easeOut, ball.y , 100, 100, false);
でも、たとえば以下のように関数の中にローカル変数を定義して、そこに入れておいても、やっぱり掃除されてしまい、あまり状況は変わらない。
private function run():void 
{
    var t1:Tween = new Tween(ball, 'x', Regular.easeOut, ball , 300, 100, false);
    var t2:Tween = new Tween(ball, 'y', Regular.easeOut, ball , 100, 100, false);
}
それならばとメンバ変数として定義し、そこにインスタンスを入れてあげてみた。これなら、クラスが破棄されない限り、生きていてくれるだろう。
var t1:Tween;
var t2:Tween;
private function run():void 
{
    t1 = new Tween(ball, 'x', Regular.easeOut, ball.x , 300, 100, false);
    t2 = new Tween(ball, 'y', Regular.easeOut, ball.y , 100, 100, false);
}
こういうやり方が正しいのかはわからないし、他にもっとやるべきことはあるだろうけど。

0 件のコメント:

コメントを投稿