2009年5月18日月曜日

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

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

0 件のコメント:

コメントを投稿