Spline vFX
forked from スプライン曲線で追跡中 (diff: 65)
ActionScript3 source code
/**
* Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/K7Em
*/
package
{
import flash.geom.Point;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.events.Event;
import flash.display.Shape;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.filters.BlurFilter;
import frocessing.color.ColorHSV;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class SplineVFX extends Sprite
{
public function SplineVFX()
{
var _bmpd:BitmapData=new BitmapData(stage.stageWidth,stage.stageHeight,true,0x0)
var points:Vector.<Point> = new Vector.<Point>
var _bf:BlurFilter = new BlurFilter( 6,6,3 );
var tightness:int = 60
var n:int = 1
var animatedObject:Sprite = new Sprite();
var shape:Shape = new Shape
var r:Number = 235
//m:uint=Math,
var h:ColorHSV = new ColorHSV();
var timerHSV:Timer = new Timer(1,0);
timerHSV.addEventListener(TimerEvent.TIMER,timerHandler)
function timerHandler():Function
{
return function()
{
h.h = i/r * 135 + n * -2000;
//h.value32
}
timerHSV.start();
}
addChild( animatedObject )
opaqueBackground = 0x000000;
stage.frameRate = 90;
addChild(new Bitmap( _bmpd ))
shape.graphics.beginFill(0x999999)
shape.graphics.drawCircle( 0,0,10 )
for (var i:int=0; i<4; i++)
{
points.push(new Point(stage.stageWidth*Math.random(), stage.stageHeight*Math.random()))
h.h = 135 + n * -2000;
var colorObjectHSV:uint;
colorObjectHSV = h.value32 ; }
addEventListener(Event.ENTER_FRAME,function(e:Event):void
{
var colorTransform:ColorTransform = new ColorTransform
colorTransform.color = 0xffffff*Math.random()
colorTransform.alphaMultiplier = 0.980
_bmpd.colorTransform( _bmpd.rect, colorTransform )
for (var i:int=0; i<4; i++)
{
var matrix:Matrix = new Matrix
matrix.translate(points[i].x, points[i].y)
var color:ColorTransform = new ColorTransform
color.color = 0xff
_bmpd.draw( shape,matrix,color )
}
var px:Number = spline(points[0].x, points[1].x, points[2].x, points[3].x, n/tightness);
var py:Number = spline(points[0].y, points[1].y, points[2].y, points[3].y, n/tightness);
var matrix2:Matrix = new Matrix
matrix2.translate(px, py)
_bmpd.draw( shape,matrix2 )
n++
if (n>tightness) {
points.shift()
points.push(new Point(stage.stageWidth*Math.random(), stage.stageHeight*Math.random()))
n=1
}
})
function spline(p0:Number, p1:Number, p2:Number, p3:Number, t:Number):Number {
var v0:Number = (p2 - p0) * 0.5;
var v1:Number = (p3 - p1) * 0.5;
var t2:Number = t * t;
var t3:Number = t2 * t;
return (2 * p1 - 2 * p2 + v0 + v1) * t3 + ( -3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
}
}
}
}
//graphics.beginFill(0x008833)
//graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight)