sprite上のbitmapオブジェクトの差し替え

動的にspriteの子であるbitmapオブジェクトを差し替えたりするところがイマイチよくわかってないので
ぐぐる

2009/07/28 追記:http://codezine.jp/article/detail/627?p=2
      3. 画像の切り替え 参照。OO的にはこうすればいいのか。
 
AS3 の表示オブジェクト入門
http://www.kunzo.jp/memo/as3/display_object_01.html
 
できた。ポインタを意識しろってことか。bitmapdataの解放も忘れずに。

    /*
     * sprite_ary[0] の中に bitmap_ary[0] が入ってて、
     * そのbitmapを入れ替えるテスト
     *  img_manz[n] にはn萬のbitmapが入ってるものとする。
     * spriteの子はbitmapのみとするので子の数は1のはず。indexは0〜
     */ 
    var p_sprite:Sprite = sprite_ary[0];
    var p_bitmap:Bitmap = bitmap_ary[0];
    var bitmap_index:int = p_sprite.getChildIndex(p_bitmap);
    trace("sprite contains is "      + p_sprite.contains(p_bitmap)); // true
    trace("sprite child object num " + p_sprite.numChildren);        // 1
    trace("sprite bitmap index "     + String(bitmap_index));        // 0
    trace("sprite child 0 is "       + p_sprite.getChildAt(0));      // [object Bitmap]
    
    p_sprite.removeChildAt(bitmap_index);
    if (p_bitmap.bitmapData != null) {
     // 初期化直後はimgが割り当てられてないので、ここは通らないハズ
     trace("bitmap dispose");
     p_bitmap.bitmapData.dispose();
    }
    
    // bitmap コピー
    trace("-> bitmap copy")
    var src_bitmap:Bitmap = img_manz[1];
    var bitmapData:BitmapData = src_bitmap.bitmapData.clone();
    var cp_bitmap:Bitmap = new Bitmap(bitmapData);
    p_sprite.addChild(cp_bitmap);
    trace("sprite child object num " + p_sprite.numChildren);          // 1
    //trace("sprite bitmap index " + p_sprite.getChildIndex(p_bitmap));//p_bitmap未更新のためエラー。
    p_bitmap = cp_bitmap;
    trace("sprite bitmap index " + p_sprite.getChildIndex(p_bitmap));  // 0
    
    
    // 二回目。
    var bitmap_index2:int = p_sprite.getChildIndex(p_bitmap);
    p_sprite.removeChildAt(bitmap_index2);
    if (p_bitmap.bitmapData != null) {
     trace("bitmap dispose");
     p_bitmap.bitmapData.dispose();
    }
    // bitmap コピー
    trace("-> bitmap copy")
    var src_bitmap2:Bitmap = img_manz[2];
    var bitmapData2:BitmapData = src_bitmap2.bitmapData.clone();
    var cp_bitmap2:Bitmap = new Bitmap(bitmapData2);
    p_sprite.addChild(cp_bitmap2);
    p_bitmap = cp_bitmap2;
    trace("sprite child object num " + p_sprite.numChildren);  // 1
    trace("bitmap parent " + p_bitmap.parent);                 // [object Sprite]
--- run ---
sprite contains is true
sprite child object num 1
sprite bitmap index 0
sprite child 0 is [object Bitmap]
-> bitmap copy
sprite child object num 1
sprite bitmap index 0
bitmap dispose
-> bitmap copy
sprite child object num 1
bitmap parent [object Sprite]