notice: Flash editor updated! Join the development! Thanks to MiniBuilder


embed

FORKED
  1. // forked from tail_y's CloudEffect
  2. package {
  3.     
  4.     /*
  5.      若干立体感のある、雲っぽい映像を作るよ。
  6.      はっきり言って重いので、実用性がちょっと無いよ!!
  7.      その代わり、リアルタイムで色合いとか変えられるから、時間に合わせて夕焼けになったりできるかも。
  8.      
  9.      仕組み的にはPhotoShopでの常套手段をFlashで再現したもの。
  10.      数値を変えるとかなりリアルなのも作れるけど、これ以上立体感を出すには他の工夫が必要。
  11.      台形変形とか、影の位置をずらしたりとかできれば・・・。
  12.      
  13.      雲模様の生成が遅いのはなんとかならないかな~
  14.      1オクターブずつ用意して、横にずれた分だけを新しく生成するとかさ。
  15.      ちょっと考えてみたけど頭痛くなったからやらなかったよ。
  16.      */
  17.     
  18.     import flash.display.Bitmap;
  19.     import flash.display.BitmapData;
  20.     import flash.display.BitmapDataChannel;
  21.     import flash.display.BlendMode;
  22.     import flash.display.GradientType;
  23.     import flash.display.Shape;
  24.     import flash.display.Sprite;
  25.     import flash.display.StageQuality;
  26.     import flash.events.Event;
  27.     import flash.filters.DisplacementMapFilter;
  28.     import flash.filters.DisplacementMapFilterMode;
  29.     import flash.geom.Matrix;
  30.     import flash.geom.Point;
  31.     import flash.geom.Rectangle;
  32.     
  33.     import net.hires.debug.Stats;
  34.     public class CloudEffect1 extends Sprite
  35.     {
  36.         public static const STAGE_W:uint = 465;
  37.         public static const STAGE_H:uint = 465;
  38.         
  39.         public static const _H_RATE:Number = 2;    // 上下の圧縮割合
  40.         
  41.         // 雲模様関係
  42.         private var _perlinNoiseBitmapData:BitmapData;
  43.         private var _seed:int = Math.random()*int.MAX_VALUE;
  44.         private var _perlinNoiseSize:Number = 0.25;    // 雲模様を画面全体に描画するのは重くて無理なので、サイズを減らす。
  45.         private var _perlinNoiseSizeW:int = STAGE_W*_perlinNoiseSize;
  46.         private var _perlinNoiseSizeH:int = STAGE_H*_perlinNoiseSize*_H_RATE;
  47.         private var _cloudSize:int = _perlinNoiseSize * 240;
  48.         private var _speedList:Point
  49.         private var _octaves:int = 5;    // 雲模様オクターブ数。レイヤー数みたいなもの。多いほど細かいけど、死ぬほど重くなる。
  50.         private var _offsetList:Array = [];    // 雲のズレ。オクターブの数だけPointが必要。
  51.         private var _offsetSpeedList:Array = [0.50.40.30.20.15];    // 雲をずらす量。
  52.         
  53.         // 立体化関係
  54.         private var _displacementBitmapData:BitmapData;
  55.         private var _displacementMapFilter:DisplacementMapFilter;
  56.         
  57.         // 色変換関係
  58.         private var _palletBitmapData:BitmapData;
  59.         private var _pallet:Array = [];
  60.         private var _nullPallet:Array = [];
  61.         
  62.         // 引き伸ばした画像データ
  63.         private var _scaleChangeBitmapData:BitmapData;
  64.         private var _scaleChangeMatrix:Matrix;
  65.         
  66.         // ちょっとしたカバー
  67.         private var _cover:Sprite;
  68.         
  69.         // その他
  70.         private var _rect:Rectangle = new Rectangle(00, STAGE_W, STAGE_H);
  71.         private var _point:Point = new Point(00);
  72.         private var _rectSmall:Rectangle = new Rectangle(00, _perlinNoiseSizeW, _perlinNoiseSizeH);
  73.         
  74.         public function CloudEffect1()
  75.         {
  76.             addEventListener(Event.ADDED_TO_STAGE, init);    // flexBuilderとの互換性。
  77.         }
  78.         private function init(e:Event):void {    // ここから開始
  79.             removeEventListener(Event.ADDED_TO_STAGE, init);
  80.             // SWF設定
  81.             stage.frameRate = 30;
  82.             stage.quality = StageQuality.HIGH;
  83.             
  84.             // 雲模様データを用意する
  85.             _perlinNoiseBitmapData = new BitmapData(_perlinNoiseSizeW, _perlinNoiseSizeH, false);
  86.             for (var i:int = 0; i < _octaves; i++) _offsetList.push(new Point());
  87.             
  88.             // 立体化データを用意する
  89.             _displacementBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  90.             _displacementMapFilter = new DisplacementMapFilter(null, _point, 0, BitmapDataChannel.RED, 0,
  91.                                      100, DisplacementMapFilterMode.CLAMP);
  92.             
  93.             // 色変換データを用意する
  94.             _palletBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  95.             createGradation();
  96.             
  97.             // サイズ
  98.             _scaleChangeBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  99.             _scaleChangeMatrix = new Matrix();
  100.             _scaleChangeMatrix.scale(1/_perlinNoiseSize, 1/_perlinNoiseSize/_H_RATE);
  101.             
  102.             // 白っぽいカバー
  103.             _cover = new Sprite();
  104.             var matrix:Matrix = new Matrix();
  105.             matrix.createGradientBox(STAGE_W, STAGE_H, Math.PI/2);
  106.             _cover.graphics.beginGradientFill(GradientType.LINEAR, [0xAAAAAA, 0xaaaaaa], [11], [128255], matrix);
  107.             _cover.graphics.drawRect(00, STAGE_W, STAGE_H);
  108.             _cover.blendMode = BlendMode.OVERLAY;
  109.             
  110.             // 表示
  111.             addChild(new Bitmap(_scaleChangeBitmapData));
  112.             addChild(_cover);
  113.             
  114.             // Stats
  115.             addChild(new Stats());
  116.             
  117.             addEventListener(Event.ENTER_FRAME, frame);
  118.         }
  119.         private function createGradation():void{    // グラデーションを作るよ
  120.             var tmpShape:Shape = new Shape();
  121.             var matrix:Matrix = new Matrix();
  122.             matrix.createGradientBox(2550);
  123.             var colorList:Array = [0xa7a7c4, 0xf3f8ff, 0xffffff, 0x418fdf];
  124.             //var colorList:Array = [0x824229, 0xfb8f1b, 0xffc768, 0xa0afac];    // 夕焼けカラーパターン
  125.             var alphaList:Array = [1,        1,        1,        1];
  126.             var ratioList:Array = [0,        80,       100,      200];
  127.             tmpShape.graphics.beginGradientFill(GradientType.LINEAR, colorList, alphaList, ratioList, matrix);
  128.             tmpShape.graphics.drawRect(002551);
  129.             var tmpBitmap:BitmapData = new BitmapData(2551false);
  130.             tmpBitmap.draw(tmpShape);
  131.             for (var i:int=0; i<256; i++){
  132.                 _pallet.push(tmpBitmap.getPixel(i, 0));
  133.                 _nullPallet.push(0x000000);
  134.             }
  135.         }
  136.         
  137.         private function frame(event:Event):void{    
  138.             for (var i:int = 0; i < _octaves; i++){    // 雲模様のオフセットを決める
  139.                 Point(_offsetList[i]).x += Number(_offsetSpeedList[i]);
  140.             }
  141.             // 雲模様を作成
  142.             _perlinNoiseBitmapData.perlinNoise(_cloudSize, _cloudSize, _octaves, _seed, falsetrue0true, _offsetList);
  143.             // 立体感を出す
  144.             _displacementMapFilter.mapBitmap = _perlinNoiseBitmapData;
  145.             _displacementBitmapData.applyFilter(_perlinNoiseBitmapData, _rectSmall, _point, _displacementMapFilter);
  146.             _displacementBitmapData.draw(_perlinNoiseBitmapData, nullnull, BlendMode.HARDLIGHT);
  147.             // パレットマップで変換
  148.             _palletBitmapData.paletteMap(_displacementBitmapData, _rectSmall, _point, _pallet, _nullPallet, _nullPallet);
  149.             // 引き伸ばす
  150.             _scaleChangeBitmapData.draw(_palletBitmapData, _scaleChangeMatrix, nullnullnulltrue);
  151.             
  152.         }
  153.         
  154.     }
  155. }
noswf
  1. // forked from tail_y's CloudEffect
  2. package {
  3.     
  4.     /*
  5.      若干立体感のある、雲っぽい映像を作るよ。
  6.      はっきり言って重いので、実用性がちょっと無いよ!!
  7.      その代わり、リアルタイムで色合いとか変えられるから、時間に合わせて夕焼けになったりできるかも。
  8.      
  9.      仕組み的にはPhotoShopでの常套手段をFlashで再現したもの。
  10.      数値を変えるとかなりリアルなのも作れるけど、これ以上立体感を出すには他の工夫が必要。
  11.      台形変形とか、影の位置をずらしたりとかできれば・・・。
  12.      
  13.      雲模様の生成が遅いのはなんとかならないかな~
  14.      1オクターブずつ用意して、横にずれた分だけを新しく生成するとかさ。
  15.      ちょっと考えてみたけど頭痛くなったからやらなかったよ。
  16.      */
  17.     
  18.     import flash.display.Bitmap;
  19.     import flash.display.BitmapData;
  20.     import flash.display.BitmapDataChannel;
  21.     import flash.display.BlendMode;
  22.     import flash.display.GradientType;
  23.     import flash.display.Shape;
  24.     import flash.display.Sprite;
  25.     import flash.display.StageQuality;
  26.     import flash.events.Event;
  27.     import flash.filters.DisplacementMapFilter;
  28.     import flash.filters.DisplacementMapFilterMode;
  29.     import flash.geom.Matrix;
  30.     import flash.geom.Point;
  31.     import flash.geom.Rectangle;
  32.     
  33.     import net.hires.debug.Stats;
  34.     public class CloudEffect1 extends Sprite
  35.     {
  36.         public static const STAGE_W:uint = 465;
  37.         public static const STAGE_H:uint = 465;
  38.         
  39.         public static const _H_RATE:Number = 2;    // 上下の圧縮割合
  40.         
  41.         // 雲模様関係
  42.         private var _perlinNoiseBitmapData:BitmapData;
  43.         private var _seed:int = Math.random()*int.MAX_VALUE;
  44.         private var _perlinNoiseSize:Number = 0.25;    // 雲模様を画面全体に描画するのは重くて無理なので、サイズを減らす。
  45.         private var _perlinNoiseSizeW:int = STAGE_W*_perlinNoiseSize;
  46.         private var _perlinNoiseSizeH:int = STAGE_H*_perlinNoiseSize*_H_RATE;
  47.         private var _cloudSize:int = _perlinNoiseSize * 240;
  48.         private var _speedList:Point
  49.         private var _octaves:int = 5;    // 雲模様オクターブ数。レイヤー数みたいなもの。多いほど細かいけど、死ぬほど重くなる。
  50.         private var _offsetList:Array = [];    // 雲のズレ。オクターブの数だけPointが必要。
  51.         private var _offsetSpeedList:Array = [0.50.40.30.20.15];    // 雲をずらす量。
  52.         
  53.         // 立体化関係
  54.         private var _displacementBitmapData:BitmapData;
  55.         private var _displacementMapFilter:DisplacementMapFilter;
  56.         
  57.         // 色変換関係
  58.         private var _palletBitmapData:BitmapData;
  59.         private var _pallet:Array = [];
  60.         private var _nullPallet:Array = [];
  61.         
  62.         // 引き伸ばした画像データ
  63.         private var _scaleChangeBitmapData:BitmapData;
  64.         private var _scaleChangeMatrix:Matrix;
  65.         
  66.         // ちょっとしたカバー
  67.         private var _cover:Sprite;
  68.         
  69.         // その他
  70.         private var _rect:Rectangle = new Rectangle(00, STAGE_W, STAGE_H);
  71.         private var _point:Point = new Point(00);
  72.         private var _rectSmall:Rectangle = new Rectangle(00, _perlinNoiseSizeW, _perlinNoiseSizeH);
  73.         
  74.         public function CloudEffect1()
  75.         {
  76.             addEventListener(Event.ADDED_TO_STAGE, init);    // flexBuilderとの互換性。
  77.         }
  78.         private function init(e:Event):void {    // ここから開始
  79.             removeEventListener(Event.ADDED_TO_STAGE, init);
  80.             // SWF設定
  81.             stage.frameRate = 30;
  82.             stage.quality = StageQuality.HIGH;
  83.             
  84.             // 雲模様データを用意する
  85.             _perlinNoiseBitmapData = new BitmapData(_perlinNoiseSizeW, _perlinNoiseSizeH, false);
  86.             for (var i:int = 0; i < _octaves; i++) _offsetList.push(new Point());
  87.             
  88.             // 立体化データを用意する
  89.             _displacementBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  90.             _displacementMapFilter = new DisplacementMapFilter(null, _point, 0, BitmapDataChannel.RED, 0,
  91.                                      100, DisplacementMapFilterMode.CLAMP);
  92.             
  93.             // 色変換データを用意する
  94.             _palletBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  95.             createGradation();
  96.             
  97.             // サイズ
  98.             _scaleChangeBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  99.             _scaleChangeMatrix = new Matrix();
  100.             _scaleChangeMatrix.scale(1/_perlinNoiseSize, 1/_perlinNoiseSize/_H_RATE);
  101.             
  102.             // 白っぽいカバー
  103.             _cover = new Sprite();
  104.             var matrix:Matrix = new Matrix();
  105.             matrix.createGradientBox(STAGE_W, STAGE_H, Math.PI/2);
  106.             _cover.graphics.beginGradientFill(GradientType.LINEAR, [0x666666, 0xaaaaaa], [11], [128255], matrix);
  107.             _cover.graphics.drawRect(00, STAGE_W, STAGE_H);
  108.             _cover.blendMode = BlendMode.OVERLAY;
  109.             
  110.             // 表示
  111.             addChild(new Bitmap(_scaleChangeBitmapData));
  112.             addChild(_cover);
  113.             
  114.             // Stats
  115.             addChild(new Stats());
  116.             
  117.             addEventListener(Event.ENTER_FRAME, frame);
  118.         }
  119.         private function createGradation():void{    // グラデーションを作るよ
  120.             var tmpShape:Shape = new Shape();
  121.             var matrix:Matrix = new Matrix();
  122.             matrix.createGradientBox(2550);
  123.             var colorList:Array = [0xa7a7c4, 0xf3f8ff, 0xffffff, 0x418fdf];
  124.             //var colorList:Array = [0x824229, 0xfb8f1b, 0xffc768, 0xa0afac];    // 夕焼けカラーパターン
  125.             var alphaList:Array = [1,        1,        1,        1];
  126.             var ratioList:Array = [0,        80,       100,      200];
  127.             tmpShape.graphics.beginGradientFill(GradientType.LINEAR, colorList, alphaList, ratioList, matrix);
  128.             tmpShape.graphics.drawRect(002551);
  129.             var tmpBitmap:BitmapData = new BitmapData(2551false);
  130.             tmpBitmap.draw(tmpShape);
  131.             for (var i:int=0; i<256; i++){
  132.                 _pallet.push(tmpBitmap.getPixel(i, 0));
  133.                 _nullPallet.push(0x000000);
  134.             }
  135.         }
  136.         
  137.         private function frame(event:Event):void{    
  138.             for (var i:int = 0; i < _octaves; i++){    // 雲模様のオフセットを決める
  139.                 Point(_offsetList[i]).x += Number(_offsetSpeedList[i]);
  140.             }
  141.             // 雲模様を作成
  142.             _perlinNoiseBitmapData.perlinNoise(_cloudSize, _cloudSize, _octaves, _seed, falsetrue0true, _offsetList);
  143.             // 立体感を出す
  144.             _displacementMapFilter.mapBitmap = _perlinNoiseBitmapData;
  145.             _displacementBitmapData.applyFilter(_perlinNoiseBitmapData, _rectSmall, _point, _displacementMapFilter);
  146.             _displacementBitmapData.draw(_perlinNoiseBitmapData, nullnull, BlendMode.HARDLIGHT);
  147.             // パレットマップで変換
  148.             _palletBitmapData.paletteMap(_displacementBitmapData, _rectSmall, _point, _pallet, _nullPallet, _nullPallet);
  149.             // 引き伸ばす
  150.             _scaleChangeBitmapData.draw(_palletBitmapData, _scaleChangeMatrix, nullnullnulltrue);
  151.             
  152.         }
  153.         
  154.     }
  155. }
noswf
  1. // forked from tail_y's CloudEffect
  2. package {
  3.     
  4.     /*
  5.      若干立体感のある、雲っぽい映像を作るよ。
  6.      はっきり言って重いので、実用性がちょっと無いよ!!
  7.      その代わり、リアルタイムで色合いとか変えられるから、時間に合わせて夕焼けになったりできるかも。
  8.      
  9.      仕組み的にはPhotoShopでの常套手段をFlashで再現したもの。
  10.      数値を変えるとかなりリアルなのも作れるけど、これ以上立体感を出すには他の工夫が必要。
  11.      台形変形とか、影の位置をずらしたりとかできれば・・・。
  12.      
  13.      雲模様の生成が遅いのはなんとかならないかな~
  14.      1オクターブずつ用意して、横にずれた分だけを新しく生成するとかさ。
  15.      ちょっと考えてみたけど頭痛くなったからやらなかったよ。
  16.      */
  17.     
  18.     import flash.display.Bitmap;
  19.     import flash.display.BitmapData;
  20.     import flash.display.BitmapDataChannel;
  21.     import flash.display.BlendMode;
  22.     import flash.display.GradientType;
  23.     import flash.display.Shape;
  24.     import flash.display.Sprite;
  25.     import flash.display.StageQuality;
  26.     import flash.events.Event;
  27.     import flash.filters.DisplacementMapFilter;
  28.     import flash.filters.DisplacementMapFilterMode;
  29.     import flash.geom.Matrix;
  30.     import flash.geom.Point;
  31.     import flash.geom.Rectangle;
  32.     
  33.     import net.hires.debug.Stats;
  34.     public class CloudEffect1 extends Sprite
  35.     {
  36.         public static const STAGE_W:uint = 640;
  37.         public static const STAGE_H:uint = 480;
  38.         
  39.         public static const _H_RATE:Number = 2;    // 上下の圧縮割合
  40.         
  41.         // 雲模様関係
  42.         private var _perlinNoiseBitmapData:BitmapData;
  43.         private var _seed:int = Math.random()*int.MAX_VALUE;
  44.         private var _perlinNoiseSize:Number = 0.25;    // 雲模様を画面全体に描画するのは重くて無理なので、サイズを減らす。
  45.         private var _perlinNoiseSizeW:int = STAGE_W*_perlinNoiseSize;
  46.         private var _perlinNoiseSizeH:int = STAGE_H*_perlinNoiseSize*_H_RATE;
  47.         private var _cloudSize:int = _perlinNoiseSize * 240;
  48.         private var _speedList:Point
  49.         private var _octaves:int = 5;    // 雲模様オクターブ数。レイヤー数みたいなもの。多いほど細かいけど、死ぬほど重くなる。
  50.         private var _offsetList:Array = [];    // 雲のズレ。オクターブの数だけPointが必要。
  51.         private var _offsetSpeedList:Array = [0.50.40.30.20.15];    // 雲をずらす量。
  52.         
  53.         // 立体化関係
  54.         private var _displacementBitmapData:BitmapData;
  55.         private var _displacementMapFilter:DisplacementMapFilter;
  56.         
  57.         // 色変換関係
  58.         private var _palletBitmapData:BitmapData;
  59.         private var _pallet:Array = [];
  60.         private var _nullPallet:Array = [];
  61.         
  62.         // 引き伸ばした画像データ
  63.         private var _scaleChangeBitmapData:BitmapData;
  64.         private var _scaleChangeMatrix:Matrix;
  65.         
  66.         // ちょっとしたカバー
  67.         private var _cover:Sprite;
  68.         
  69.         // その他
  70.         private var _rect:Rectangle = new Rectangle(00, STAGE_W, STAGE_H);
  71.         private var _point:Point = new Point(00);
  72.         private var _rectSmall:Rectangle = new Rectangle(00, _perlinNoiseSizeW, _perlinNoiseSizeH);
  73.         
  74.         public function CloudEffect1()
  75.         {
  76.             addEventListener(Event.ADDED_TO_STAGE, init);    // flexBuilderとの互換性。
  77.         }
  78.         private function init(e:Event):void {    // ここから開始
  79.             removeEventListener(Event.ADDED_TO_STAGE, init);
  80.             // SWF設定
  81.             stage.frameRate = 30;
  82.             stage.quality = StageQuality.HIGH;
  83.             
  84.             // 雲模様データを用意する
  85.             _perlinNoiseBitmapData = new BitmapData(_perlinNoiseSizeW, _perlinNoiseSizeH, false);
  86.             for (var i:int = 0; i < _octaves; i++) _offsetList.push(new Point());
  87.             
  88.             // 立体化データを用意する
  89.             _displacementBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  90.             _displacementMapFilter = new DisplacementMapFilter(null, _point, 0, BitmapDataChannel.RED, 0,
  91.                                      100, DisplacementMapFilterMode.CLAMP);
  92.             
  93.             // 色変換データを用意する
  94.             _palletBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  95.             createGradation();
  96.             
  97.             // サイズ
  98.             _scaleChangeBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  99.             _scaleChangeMatrix = new Matrix();
  100.             _scaleChangeMatrix.scale(1/_perlinNoiseSize, 1/_perlinNoiseSize/_H_RATE);
  101.             
  102.             // 白っぽいカバー
  103.             _cover = new Sprite();
  104.             var matrix:Matrix = new Matrix();
  105.             matrix.createGradientBox(STAGE_W, STAGE_H, Math.PI/2);
  106.             _cover.graphics.beginGradientFill(GradientType.LINEAR, [0x666666, 0xaaaaaa], [11], [128255], matrix);
  107.             _cover.graphics.drawRect(00, STAGE_W, STAGE_H);
  108.             _cover.blendMode = BlendMode.OVERLAY;
  109.             
  110.             // 表示
  111.             addChild(new Bitmap(_scaleChangeBitmapData));
  112.             addChild(_cover);
  113.             
  114.             // Stats
  115.             addChild(new Stats());
  116.             
  117.             addEventListener(Event.ENTER_FRAME, frame);
  118.         }
  119.         private function createGradation():void{    // グラデーションを作るよ
  120.             var tmpShape:Shape = new Shape();
  121.             var matrix:Matrix = new Matrix();
  122.             matrix.createGradientBox(2550);
  123.             var colorList:Array = [0xa7a7c4, 0xf3f8ff, 0xffffff, 0x418fdf];
  124.             //var colorList:Array = [0x824229, 0xfb8f1b, 0xffc768, 0xa0afac];    // 夕焼けカラーパターン
  125.             var alphaList:Array = [1,        1,        1,        1];
  126.             var ratioList:Array = [0,        80,       100,      200];
  127.             tmpShape.graphics.beginGradientFill(GradientType.LINEAR, colorList, alphaList, ratioList, matrix);
  128.             tmpShape.graphics.drawRect(002551);
  129.             var tmpBitmap:BitmapData = new BitmapData(2551false);
  130.             tmpBitmap.draw(tmpShape);
  131.             for (var i:int=0; i<256; i++){
  132.                 _pallet.push(tmpBitmap.getPixel(i, 0));
  133.                 _nullPallet.push(0x000000);
  134.             }
  135.         }
  136.         
  137.         private function frame(event:Event):void{    
  138.             for (var i:int = 0; i < _octaves; i++){    // 雲模様のオフセットを決める
  139.                 Point(_offsetList[i]).x += Number(_offsetSpeedList[i]);
  140.             }
  141.             // 雲模様を作成
  142.             _perlinNoiseBitmapData.perlinNoise(_cloudSize, _cloudSize, _octaves, _seed, falsetrue0true, _offsetList);
  143.             // 立体感を出す
  144.             _displacementMapFilter.mapBitmap = _perlinNoiseBitmapData;
  145.             _displacementBitmapData.applyFilter(_perlinNoiseBitmapData, _rectSmall, _point, _displacementMapFilter);
  146.             _displacementBitmapData.draw(_perlinNoiseBitmapData, nullnull, BlendMode.HARDLIGHT);
  147.             // パレットマップで変換
  148.             _palletBitmapData.paletteMap(_displacementBitmapData, _rectSmall, _point, _pallet, _nullPallet, _nullPallet);
  149.             // 引き伸ばす
  150.             _scaleChangeBitmapData.draw(_palletBitmapData, _scaleChangeMatrix, nullnullnulltrue);
  151.             
  152.         }
  153.         
  154.     }
  155. }
noswf
  1. // forked from tail_y's CloudEffect
  2. package {
  3.     
  4.     /*
  5.      若干立体感のある、雲っぽい映像を作るよ。
  6.      はっきり言って重いので、実用性がちょっと無いよ!!
  7.      その代わり、リアルタイムで色合いとか変えられるから、時間に合わせて夕焼けになったりできるかも。
  8.      
  9.      仕組み的にはPhotoShopでの常套手段をFlashで再現したもの。
  10.      数値を変えるとかなりリアルなのも作れるけど、これ以上立体感を出すには他の工夫が必要。
  11.      台形変形とか、影の位置をずらしたりとかできれば・・・。
  12.      
  13.      雲模様の生成が遅いのはなんとかならないかな~
  14.      1オクターブずつ用意して、横にずれた分だけを新しく生成するとかさ。
  15.      ちょっと考えてみたけど頭痛くなったからやらなかったよ。
  16.      */
  17.     
  18.     import flash.display.Bitmap;
  19.     import flash.display.BitmapData;
  20.     import flash.display.BitmapDataChannel;
  21.     import flash.display.BlendMode;
  22.     import flash.display.GradientType;
  23.     import flash.display.Shape;
  24.     import flash.display.Sprite;
  25.     import flash.display.StageQuality;
  26.     import flash.events.Event;
  27.     import flash.filters.DisplacementMapFilter;
  28.     import flash.filters.DisplacementMapFilterMode;
  29.     import flash.geom.Matrix;
  30.     import flash.geom.Point;
  31.     import flash.geom.Rectangle;
  32.     
  33.     import net.hires.debug.Stats;
  34.     public class CloudEffect1 extends Sprite
  35.     {
  36.         public static const STAGE_W:uint = 465;
  37.         public static const STAGE_H:uint = 465;
  38.         
  39.         public static const _H_RATE:Number = 2;    // 上下の圧縮割合
  40.         
  41.         // 雲模様関係
  42.         private var _perlinNoiseBitmapData:BitmapData;
  43.         private var _seed:int = Math.random()*int.MAX_VALUE;
  44.         private var _perlinNoiseSize:Number = 0.25;    // 雲模様を画面全体に描画するのは重くて無理なので、サイズを減らす。
  45.         private var _perlinNoiseSizeW:int = STAGE_W*_perlinNoiseSize;
  46.         private var _perlinNoiseSizeH:int = STAGE_H*_perlinNoiseSize*_H_RATE;
  47.         private var _cloudSize:int = _perlinNoiseSize * 240;
  48.         private var _speedList:Point
  49.         private var _octaves:int = 5;    // 雲模様オクターブ数。レイヤー数みたいなもの。多いほど細かいけど、死ぬほど重くなる。
  50.         private var _offsetList:Array = [];    // 雲のズレ。オクターブの数だけPointが必要。
  51.         private var _offsetSpeedList:Array = [0.50.40.30.20.15];    // 雲をずらす量。
  52.         
  53.         // 立体化関係
  54.         private var _displacementBitmapData:BitmapData;
  55.         private var _displacementMapFilter:DisplacementMapFilter;
  56.         
  57.         // 色変換関係
  58.         private var _palletBitmapData:BitmapData;
  59.         private var _pallet:Array = [];
  60.         private var _nullPallet:Array = [];
  61.         
  62.         // 引き伸ばした画像データ
  63.         private var _scaleChangeBitmapData:BitmapData;
  64.         private var _scaleChangeMatrix:Matrix;
  65.         
  66.         // ちょっとしたカバー
  67.         private var _cover:Sprite;
  68.         
  69.         // その他
  70.         private var _rect:Rectangle = new Rectangle(00, STAGE_W, STAGE_H);
  71.         private var _point:Point = new Point(00);
  72.         private var _rectSmall:Rectangle = new Rectangle(00, _perlinNoiseSizeW, _perlinNoiseSizeH);
  73.         
  74.         public function CloudEffect1()
  75.         {
  76.             addEventListener(Event.ADDED_TO_STAGE, init);    // flexBuilderとの互換性。
  77.         }
  78.         private function init(e:Event):void {    // ここから開始
  79.             removeEventListener(Event.ADDED_TO_STAGE, init);
  80.             // SWF設定
  81.             stage.frameRate = 30;
  82.             stage.quality = StageQuality.HIGH;
  83.             
  84.             // 雲模様データを用意する
  85.             _perlinNoiseBitmapData = new BitmapData(_perlinNoiseSizeW, _perlinNoiseSizeH, false);
  86.             for (var i:int = 0; i < _octaves; i++) _offsetList.push(new Point());
  87.             
  88.             // 立体化データを用意する
  89.             _displacementBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  90.             _displacementMapFilter = new DisplacementMapFilter(null, _point, 0, BitmapDataChannel.RED, 0,
  91.                                      100, DisplacementMapFilterMode.CLAMP);
  92.             
  93.             // 色変換データを用意する
  94.             _palletBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  95.             createGradation();
  96.             
  97.             // サイズ
  98.             _scaleChangeBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  99.             _scaleChangeMatrix = new Matrix();
  100.             _scaleChangeMatrix.scale(1/_perlinNoiseSize, 1/_perlinNoiseSize/_H_RATE);
  101.             
  102.             // 白っぽいカバー
  103.             _cover = new Sprite();
  104.             var matrix:Matrix = new Matrix();
  105.             matrix.createGradientBox(STAGE_W, STAGE_H, Math.PI/2);
  106.             _cover.graphics.beginGradientFill(GradientType.LINEAR, [0x666666, 0xaaaaaa], [11], [128255], matrix);
  107.             _cover.graphics.drawRect(00, STAGE_W, STAGE_H);
  108.             _cover.blendMode = BlendMode.OVERLAY;
  109.             
  110.             // 表示
  111.             addChild(new Bitmap(_scaleChangeBitmapData));
  112.             addChild(_cover);
  113.             
  114.             // Stats
  115.             addChild(new Stats());
  116.             
  117.             addEventListener(Event.ENTER_FRAME, frame);
  118.         }
  119.         private function createGradation():void{    // グラデーションを作るよ
  120.             var tmpShape:Shape = new Shape();
  121.             var matrix:Matrix = new Matrix();
  122.             matrix.createGradientBox(2550);
  123.             var colorList:Array = [0xa7a7c4, 0xf3f8ff, 0xffffff, 0x418fdf];
  124.             //var colorList:Array = [0x824229, 0xfb8f1b, 0xffc768, 0xa0afac];    // 夕焼けカラーパターン
  125.             var alphaList:Array = [1,        1,        1,        1];
  126.             var ratioList:Array = [0,        80,       100,      200];
  127.             tmpShape.graphics.beginGradientFill(GradientType.LINEAR, colorList, alphaList, ratioList, matrix);
  128.             tmpShape.graphics.drawRect(002551);
  129.             var tmpBitmap:BitmapData = new BitmapData(2551false);
  130.             tmpBitmap.draw(tmpShape);
  131.             for (var i:int=0; i<256; i++){
  132.                 _pallet.push(tmpBitmap.getPixel(i, 0));
  133.                 _nullPallet.push(0x000000);
  134.             }
  135.         }
  136.         
  137.         private function frame(event:Event):void{    
  138.             for (var i:int = 0; i < _octaves; i++){    // 雲模様のオフセットを決める
  139.                 Point(_offsetList[i]).x += Number(_offsetSpeedList[i]);
  140.             }
  141.             // 雲模様を作成
  142.             _perlinNoiseBitmapData.perlinNoise(_cloudSize, _cloudSize, _octaves, _seed, falsetrue0true, _offsetList);
  143.             // 立体感を出す
  144.             _displacementMapFilter.mapBitmap = _perlinNoiseBitmapData;
  145.             _displacementBitmapData.applyFilter(_perlinNoiseBitmapData, _rectSmall, _point, _displacementMapFilter);
  146.             _displacementBitmapData.draw(_perlinNoiseBitmapData, nullnull, BlendMode.HARDLIGHT);
  147.             // パレットマップで変換
  148.             _palletBitmapData.paletteMap(_displacementBitmapData, _rectSmall, _point, _pallet, _nullPallet, _nullPallet);
  149.             // 引き伸ばす
  150.             _scaleChangeBitmapData.draw(_palletBitmapData, _scaleChangeMatrix, nullnullnulltrue);
  151.             
  152.         }
  153.         
  154.     }
  155. }
noswf
  1. // forked from tail_y's CloudEffect
  2. package {
  3.     
  4.     /*
  5.      若干立体感のある、雲っぽい映像を作るよ。
  6.      はっきり言って重いので、実用性がちょっと無いよ!!
  7.      その代わり、リアルタイムで色合いとか変えられるから、時間に合わせて夕焼けになったりできるかも。
  8.      
  9.      仕組み的にはPhotoShopでの常套手段をFlashで再現したもの。
  10.      数値を変えるとかなりリアルなのも作れるけど、これ以上立体感を出すには他の工夫が必要。
  11.      台形変形とか、影の位置をずらしたりとかできれば・・・。
  12.      
  13.      雲模様の生成が遅いのはなんとかならないかな~
  14.      1オクターブずつ用意して、横にずれた分だけを新しく生成するとかさ。
  15.      ちょっと考えてみたけど頭痛くなったからやらなかったよ。
  16.      */
  17.     
  18.     import flash.display.Bitmap;
  19.     import flash.display.BitmapData;
  20.     import flash.display.BitmapDataChannel;
  21.     import flash.display.BlendMode;
  22.     import flash.display.GradientType;
  23.     import flash.display.Shape;
  24.     import flash.display.Sprite;
  25.     import flash.display.StageQuality;
  26.     import flash.events.Event;
  27.     import flash.filters.DisplacementMapFilter;
  28.     import flash.filters.DisplacementMapFilterMode;
  29.     import flash.geom.Matrix;
  30.     import flash.geom.Point;
  31.     import flash.geom.Rectangle;
  32.     
  33.     import net.hires.debug.Stats;
  34.     public class CloudEffect1 extends Sprite
  35.     {
  36.         public static const STAGE_W:uint = 465;
  37.         public static const STAGE_H:uint = 465;
  38.         
  39.         public static const _H_RATE:Number = 2;    // 上下の圧縮割合
  40.         
  41.         // 雲模様関係
  42.         private var _perlinNoiseBitmapData:BitmapData;
  43.         private var _seed:int = Math.random()*int.MAX_VALUE;
  44.         private var _perlinNoiseSize:Number = 0.5    // 雲模様を画面全体に描画するのは重くて無理なので、サイズを減らす。
  45.         private var _perlinNoiseSizeW:int = STAGE_W*_perlinNoiseSize;
  46.         private var _perlinNoiseSizeH:int = STAGE_H*_perlinNoiseSize*_H_RATE;
  47.         private var _cloudSize:int = _perlinNoiseSize * 300;
  48.         private var _speedList:Point
  49.         private var _octaves:int = 5;    // 雲模様オクターブ数。レイヤー数みたいなもの。多いほど細かいけど、死ぬほど重くなる。
  50.         private var _offsetList:Array = [];    // 雲のズレ。オクターブの数だけPointが必要。
  51.         private var _offsetSpeedList:Array = [0.50.40.30.20.15];    // 雲をずらす量。
  52.         
  53.         // 立体化関係
  54.         private var _displacementBitmapData:BitmapData;
  55.         private var _displacementMapFilter:DisplacementMapFilter;
  56.         
  57.         // 色変換関係
  58.         private var _palletBitmapData:BitmapData;
  59.         private var _pallet:Array = [];
  60.         private var _nullPallet:Array = [];
  61.         
  62.         // 引き伸ばした画像データ
  63.         private var _scaleChangeBitmapData:BitmapData;
  64.         private var _scaleChangeMatrix:Matrix;
  65.         
  66.         // ちょっとしたカバー
  67.         private var _cover:Sprite;
  68.         
  69.         // その他
  70.         private var _rect:Rectangle = new Rectangle(00, STAGE_W, STAGE_H);
  71.         private var _point:Point = new Point(00);
  72.         private var _rectSmall:Rectangle = new Rectangle(00, _perlinNoiseSizeW, _perlinNoiseSizeH);
  73.         
  74.         public function CloudEffect1()
  75.         {
  76.             addEventListener(Event.ADDED_TO_STAGE, init);    // flexBuilderとの互換性。
  77.         }
  78.         private function init(e:Event):void {    // ここから開始
  79.             removeEventListener(Event.ADDED_TO_STAGE, init);
  80.             // SWF設定
  81.             stage.frameRate = 30;
  82.             stage.quality = StageQuality.HIGH;
  83.             
  84.             // 雲模様データを用意する
  85.             _perlinNoiseBitmapData = new BitmapData(_perlinNoiseSizeW, _perlinNoiseSizeH, false);
  86.             for (var i:int = 0; i < _octaves; i++) _offsetList.push(new Point());
  87.             
  88.             // 立体化データを用意する
  89.             _displacementBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  90.             _displacementMapFilter = new DisplacementMapFilter(null, _point, 0, BitmapDataChannel.RED, 0,
  91.                                      100, DisplacementMapFilterMode.CLAMP);
  92.             
  93.             // 色変換データを用意する
  94.             _palletBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  95.             createGradation();
  96.             
  97.             // サイズ
  98.             _scaleChangeBitmapData = new BitmapData(STAGE_W, STAGE_H, false);
  99.             _scaleChangeMatrix = new Matrix();
  100.             _scaleChangeMatrix.scale(1/_perlinNoiseSize, 1/_perlinNoiseSize/_H_RATE);
  101.             
  102.             // 白っぽいカバー
  103.             _cover = new Sprite();
  104.             var matrix:Matrix = new Matrix();
  105.             matrix.createGradientBox(STAGE_W, STAGE_H, Math.PI/2);
  106.             _cover.graphics.beginGradientFill(GradientType.LINEAR, [0x666666, 0xaaaaaa], [11], [128255], matrix);
  107.             _cover.graphics.drawRect(00, STAGE_W, STAGE_H);
  108.             _cover.blendMode = BlendMode.OVERLAY;
  109.             
  110.             // 表示
  111.             addChild(new Bitmap(_scaleChangeBitmapData));
  112.             addChild(_cover);
  113.             
  114.             // Stats
  115.             addChild(new Stats());
  116.             
  117.             addEventListener(Event.ENTER_FRAME, frame);
  118.         }
  119.         private function createGradation():void{    // グラデーションを作るよ
  120.             var tmpShape:Shape = new Shape();
  121.             var matrix:Matrix = new Matrix();
  122.             matrix.createGradientBox(2550);
  123.             var colorList:Array = [0xa7a7c4, 0xf3f8ff, 0xffffff, 0x418fdf];
  124.             //var colorList:Array = [0x824229, 0xfb8f1b, 0xffc768, 0xa0afac];    // 夕焼けカラーパターン
  125.             var alphaList:Array = [1,        1,        1,        1];
  126.             var ratioList:Array = [0,        80,       100,      200];
  127.             tmpShape.graphics.beginGradientFill(GradientType.LINEAR, colorList, alphaList, ratioList, matrix);
  128.             tmpShape.graphics.drawRect(002551);
  129.             var tmpBitmap:BitmapData = new BitmapData(2551false);
  130.             tmpBitmap.draw(tmpShape);
  131.             for (var i:int=0; i<256; i++){
  132.                 _pallet.push(tmpBitmap.getPixel(i, 0));
  133.                 _nullPallet.push(0x000000);
  134.             }
  135.         }
  136.         
  137.         private function frame(event:Event):void{    
  138.             for (var i:int = 0; i < _octaves; i++){    // 雲模様のオフセットを決める
  139.                 Point(_offsetList[i]).x += Number(_offsetSpeedList[i]);
  140.             }
  141.             // 雲模様を作成
  142.             _perlinNoiseBitmapData.perlinNoise(_cloudSize, _cloudSize, _octaves, _seed, falsetrue0true, _offsetList);
  143.             // 立体感を出す
  144.             _displacementMapFilter.mapBitmap = _perlinNoiseBitmapData;
  145.             _displacementBitmapData.applyFilter(_perlinNoiseBitmapData, _rectSmall, _point, _displacementMapFilter);
  146.             _displacementBitmapData.draw(_perlinNoiseBitmapData, nullnull, BlendMode.HARDLIGHT);
  147.             // パレットマップで変換
  148.             _palletBitmapData.paletteMap(_displacementBitmapData, _rectSmall, _point, _pallet, _nullPallet, _nullPallet);
  149.             // 引き伸ばす
  150.             _scaleChangeBitmapData.draw(_palletBitmapData, _scaleChangeMatrix, nullnullnulltrue);
  151.             
  152.         }
  153.         
  154.     }
  155. }
noswf
Get Adobe Flash Player