forked from: 雲(静止画)
雲(静止画)の生成
perlinNoiseで雲っぽいの生成できるとは聞いてたけど、
やってみたらあんまり雲っぽくな、、、かったので、試行錯誤で
それっぽいやつを。背景とかに使いたいわけです。
そろそろAS3の本一冊ぐらい買いたい。。。
2009.12.24
/**
* Copyright heart_thai ( http://wonderfl.net/user/heart_thai )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/ptY8
*/
// forked from Dorara's 雲(静止画)
// 雲(静止画)の生成
// perlinNoiseで雲っぽいの生成できるとは聞いてたけど、
// やってみたらあんまり雲っぽくな、、、かったので、試行錯誤で
// それっぽいやつを。背景とかに使いたいわけです。
// そろそろAS3の本一冊ぐらい買いたい。。。
// 2009.12.24
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BlendMode;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.filters.BlurFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.events.Event;
import flash.geom.Point;
[SWF(width="465", height="465",backgroundColor=0x00000000,frameRate="30")]
public class Clouds extends Sprite
{
private var _bitmap:BitmapData;
private var _grad:BitmapData;
private var offsets:Array;
public function Clouds()
{
this.stage.scaleMode = StageScaleMode.NO_SCALE;
this.stage.align = StageAlign.TOP_LEFT;
//雲の部分
_bitmap = new BitmapData(stage.stageWidth, stage.stageHeight);
//空の部分+雲を重ね合わせる
_grad = new BitmapData(stage.stageWidth, stage.stageHeight);
//表示
var image:Bitmap = new Bitmap(_grad);
addChild(image);
//雲を作る
//createClouds();
offsets = new Array(new Point(),new Point());
this.addEventListener(Event.ENTER_FRAME , createClouds );
}
//雲の生成
public function createClouds(e:Event):void
{
//空のグラデーション
var gradation:Sprite = new Sprite();
var mat:Matrix = new Matrix();
mat.rotate(Math.PI/2); //グラデーションを上下にする
gradation.graphics.beginGradientFill("linear", [0x1440d3,0x5a7cef,0xcdd7ff], [1,1,1], [0,127,255], mat);
gradation.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
gradation.graphics.endFill();
_grad.draw(gradation);
//雲の生成
//Math.round(Math.random()*1000)+1
offsets[0].x += 10;
//offsets[1].x += 1;
_bitmap.perlinNoise(100, 100, 11, 1, false, true, 4, true,offsets);
_bitmap.threshold(_bitmap, _bitmap.rect, new Point(), "<", 0x008f0000, 0x00000000, 0x00ff0000, true);
///雲の真ん中部分の白を強くしたい(同じやつを重ねてみた)
_bitmap.draw(_bitmap, new Matrix(), new ColorTransform(), BlendMode.OVERLAY);
_bitmap.draw(_bitmap, new Matrix(), new ColorTransform(), BlendMode.OVERLAY);
///ブラーかけてごまかす
_bitmap.applyFilter(_bitmap, _bitmap.rect, new Point(), new BlurFilter());
//空と雲を重ね合わせる
_grad.draw(_bitmap, new Matrix(), new ColorTransform(), BlendMode.HARDLIGHT);
}
}
}