0

申し訳ありませんが、actionscript 3 は初めてです。

オブジェクトローテータ(QTオブジェクトムービーのような画像ベース)のdisplay()関数があります。最初に現在の画像をヘルパー変数に保存し、次にライブラリから古い画像の下に新しい画像を割り当てます。素敵なクロスフェード効果を得るために、古い画像のアルファは enter_frame を介してループダウンされてから削除されます。

おそらく、oldImg の値が既に追加されていることを認識して、表示リストに問題があると思われるのはどこですか? (初回通過エラーではありません)

ところで、古い画像を削除する必要がありますか、それともそのままにしておいてもいいですか? (画像数はかなり大きくなる可能性があります)

誰かがさらに洞察を持っていますか? ありがとう!

function display(num:Number):void   //num: image number
{
   ...    
   oldImg = newImg;   

   ClassReference = getDefinitionByName("Class"+num) as Class;
   imgBD = new ClassReference(0,0);
   newImg = new Bitmap(imgBD);

   images.addChild(newImg); 
   newImg.x=0;
   newImg.y=0;

}


function onEnter(evt:Event):void
{
    if (oldImg) 
    {
        if (oldImg.alpha > 0) oldImg.alpha -= 0.15; 
        **else images.removeChild(oldImg);**              
    }
        ...
}
4

3 に答える 3

0

まあ、onEnterエンターフレームハンドラーのようです。オブジェクトがフェードアウトしたら、リスナーを削除するのを忘れていました。alphaが0になると、画像が削除されます。しかし、1フレーム後、ハンドラーは引き続き呼び出されます。現在oldImgはの子ではありませんimages

編集:多分あなたはただトゥイーンライブラリを使うべきです。個人的には、eazeをお勧めします。

于 2010-04-06T10:45:23.793 に答える
0

みんなありがとう、確かに私はテストする必要があります

if ( (oldImg) && images.contains(oldImg) ) 

画像オブジェクトごとに別の enter_frame イベント ハンドラーを使用しない場合は、これがより良い解決策だと思います。

于 2010-04-06T11:38:17.260 に答える
-1

に追加oldImgするimagesことoldImgはないため、呼び出し元(images)の子ではなく、そのムービークリップから削除することはできません。初めてEnterFrame呼ばれるとこうなると思います。

于 2010-04-06T10:39:51.480 に答える