In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

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
    {
	//
    }
}