AS3.0のTweenが動作しない場合の対処

2009-06-30 (火)カテゴリ制作 , 興味関心タグ ,

ここ数日FLASHに触っていて悩んだことメモ。

AS2.0でお世話になりまくったTweenですが、どうもAS3.0ではきちんと動かないで終了してしまう場合があるようです。

対処方法として、各Tweenインスタンスをすべて配列に保持して終了と同時にきちんと削除してあげる必要があります。

Action Script
import fl.transitions.Tween;
import fl.transitions.TweenEvent;
import fl.transitions.easing.*;

var tween_arr:Array = new Array();
var myTween:Tween = new Tween(obj, "alpha", Strong.easeIn, 1, 0, 2, true);
tween_arr.push(myTween);   // 配列にTweenインスタンスを保持
myTween.addEventListener(TweenEvent.MOTION_FINISH, onFinish);

function onFinish(e:TweenEvent){
//処理
  var myTween:Tween = Tween(e.target);
  xDispose(myTween);   // 配列からTweenを削除
}

// 配列からTweenインスタンスを削除する関数
function xDispose(obj:Tween):Boolean {
  var nLength:int = tween_array.length;
  for (var i:int = 0; i<nLength; i++) {
    if (tween_array[i] == obj) {
      tween_array.splice(i, 1);
      return true;
    }
  }
  return false;
}

どうやら「弱い参照」というものをTweenが採用しているためだそうです。詳しくは以下。
Tweenのアニメーションが途中で止まる

One Response to “AS3.0のTweenが動作しない場合の対処”

  1. blog.bygami.net » Blog Archive » AS3.0のTweenが動作しない場合の対処 Says:

    [...] る必要があります。AS3.0のTweenが動作しない場合の対処 | みぞおち [...]

コメントをする

http://mizoochi.com/archives/590.html/trackback