PerlinNoise による、軽くてきれいな動く背景を作ってみる
////////////////////////////////////////////////////
perlinNoise による、軽くてきれいな動く背景を作ってみる
////////////////////////////////////////////////////
/**
* Copyright mi77 ( http://wonderfl.net/user/mi77 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/ixEp
*/
// forked from mi77's perlinNoise の引数をわかりやすくまとまる
/*
////////////////////////////////////////////////////
perlinNoise による、軽くてきれいな動く背景を作ってみる
////////////////////////////////////////////////////
*/
package
{
////////////////////////////////////////////////////////////////////////////////// ラップれです
import flash.display.Sprite;
import org.libspark.thread.Thread;
import org.libspark.thread.EnterFrameThreadExecutor;
[SWF(frameRate = 30, width = 465, height = 465, backgroundColor = 0x000000)]
public class Wrap extends Sprite
{
private var t:Velvet;
public function Wrap()
{
if (!Thread.isReady)
{
Thread.initialize(new EnterFrameThreadExecutor());//Thread
}
t = new Velvet(this);
t.start();
}
}
//////////////////////////////////////////////////////////////////////////////////
}
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.filters.*;
import org.libspark.thread.Thread;
import caurina.transitions.Tweener;
import caurina.transitions.properties.ColorShortcuts; ColorShortcuts.init();
import caurina.transitions.properties.FilterShortcuts; FilterShortcuts.init();
internal class Velvet extends Thread
{
private var main:Sprite;
private var sp:Sprite;
private var bmps:Object;
private var bmds:Object;
private var offset:Object;
private const size:int=465;
private const ratio:int = 4;
private var i:int;
public function Velvet (main:Sprite)
{
this.main = main;
}
override protected function run():void
{
sp = new Sprite();
main.addChild(sp);
sp.scaleX= sp.scaleY= ratio;
//
sp.rotationX = -81.95;
sp.y = 195;
//
bmds = [];
bmps = [];
bmds[0] = new BitmapData(size/ratio, size/ratio);
bmps[0] = new Bitmap(bmds[0]);
bmps[0].smoothing = true;
sp.addChild(bmps[0]);
initNoiz();
sp.addEventListener(Event.ENTER_FRAME, enterFrameH);
}
private function initNoiz():void
{
offset = [new Point(0, 0), new Point(0, 0)];
offset[0].x = 0;
offset[0].y = 0;
offset[1].x = 0;
offset[1].y = 0;
}
public function enterFrameH(e:Event):void
{
offset[0].x -= 0.5;
offset[0].y -= 0.4;
offset[1].x -= 0.2;
offset[1].y -= 0.1;
bmds[0].perlinNoise(
32,//-----------------/ 1 : X周波数 : int
32,//-----------------/ 2 : Y周波数 : int
6,//------------------/ 3 : レイヤー枚数 :int
100,//----------------/ 4 : 波動の乱れのダイナミクス : int
false,//--------------- / 5 : タイリング用に上下と左右をつなぐ ?
false,//--------------- / 6 : フラクタルノイズ?
(4),//------------- / 7 : カラーチャンネルをビットで指定 : ( 0x01R | 0x02 G | 0x04 B | 0x08 Alpha ) ---
false,//---------------/ 8 : グレイスケール?
offset//-------------- / 9 : 各レイヤーをスクロールするためのPoint型の配列
);
i++;
}
override protected function finalize():void
{
//
}
}