TilingImageクラスを作ってみた

このクラスは一つのmcを均等に隙間なく並べて画面を埋め尽くせる。

import flash.display.BitmapData;
import flash.geom.Matrix; class TilingImage
{
   private var mc:MovieClip;
   private var tile:MovieClip;
   private var tiledBmp:BitmapData
   
   /**
   * @param reactResize StageのonResizeイベントで再生成するかどうか
   */
   function TilingImage(reactResize:Boolean)
   {
      if (reactResize || reactResize==null)
      {
         Stage.addListener(this);
      }
   }
   
   /**
   * タイリング画像を生成する
   * @param targetMC タイリングしたbitmapをattachBitmapするMovieClip
   * @param img タイリングする画像を含んだMovieClip
   */
   public function generate(targetMC:MovieClip, img:MovieClip):Void
   {
      if (targetMC == null || img==null)
      {
         return;
      }
      
      mc = targetMC;
      tile = img;
      
      //完成形をdrawするbmp
      dispose();
      tiledBmp = new BitmapData(Stage.width, Stage.height);
      
      var tileW = tile._width;
      var tileH = tile._height;
      
      var xLen = Math.ceil(Stage.width / tileW) + 1;
      var yLen = Math.ceil(Stage.height / tileH) + 1;
      
      for (var i = 1; i <= yLen; i++)
      {
         for (var c = 1; c <= xLen; c++)
         {
            var mat:Matrix = new Matrix;
            var x = tileW * (c – 1);
            var y = tileH * (i – 1);
            mat.translate(x, y);
            
            tiledBmp.draw(tile, mat);
         }
      }
      mc.attachBitmap(tiledBmp, mc.getNextHighestDepth());
   }
   
   public function dispose():Void
   {
      tiledBmp.dispose();
   }
   
   private function onResize():Void
   {
      generate(mc, tile);
   }
   
   private function toString():String
   {
      return “TilingImage”
   }
}

使い方はまずStageのonResizeイベントで再生成するかどうかのフラグを引数にコンストラクタを呼び出す。
これをfalseで呼び出すと、画面のサイズが変わった時にタイリングした画像がリサイズ前の画面のサイズのままで残ってしまう。なので通常はtrueで呼び出すか、もしくは指定なしで呼び出す。デフォルトはtrue。

var TI:TilingImage = new TilingImage(true);

でタイリングした画像を格納するMovieClipとタイリングするMovieClipの参照を引数にgenerateを実行する。

TI.generate(targetMC, tilingMC);

これでタイリングされた画像がtargetMCにアタッチされて画面前面がtilingMCに覆われる。
で消したいときはdispose()を実行すれば画像がクリアされる。

TI.dispose();

以上。

ちなみに5erは初期化の際に外部のタイル画像を読み込んで、このクラスで全画面化して写真にフィルターをかけてる。