flash on 2012-11-22

by xarple
WaveParticle

[AS3.0] WaveParticleに挑戦! (3)
http://www.project-nya.jp/modules/weblog/details.php?blog_id=1564
[AS3.0] FontLoaderクラスに挑戦! (1)
http://www.project-nya.jp/modules/weblog/details.php?blog_id=1337

http://clockmaker.jp/blog/2011/11/starling-framework-sample/
♥0 | Line 147 | Modified 2012-11-22 19:53:25 | MIT License
play

ActionScript3 source code

/**
 * Copyright xarple ( http://wonderfl.net/user/xarple )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/aVTC
 */

////////////////////////////////////////////////////////////////////////////////
// WaveParticle
//
// [AS3.0] WaveParticleに挑戦! (3)
// http://www.project-nya.jp/modules/weblog/details.php?blog_id=1564
// [AS3.0] FontLoaderクラスに挑戦! (1)
// http://www.project-nya.jp/modules/weblog/details.php?blog_id=1337
//
// http://clockmaker.jp/blog/2011/11/starling-framework-sample/
////////////////////////////////////////////////////////////////////////////////

package {

    import flash.display.Sprite;
    import flash.display.StageScaleMode;
    import flash.display.StageAlign;
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.geom.Rectangle;
    import flash.display.BlendMode;
    import org.libspark.betweenas3.BetweenAS3;
    import org.libspark.betweenas3.tweens.ITween;
    import org.libspark.betweenas3.events.TweenEvent;
    import org.libspark.betweenas3.easing.*;

    [SWF(backgroundColor="#0473B2", width="465", height="465", frameRate="30")]

    public class Main extends Sprite {

        private var background:Background;
       private var container:Sprite;
        private var wave:Wave;

        public function Main() {
            //Wonderfl.capture_delay(1);
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            init();
        }

        private function init():void {
            background = new Background();
            addChild(background);
            //

            //
            wave = new Wave(new Rectangle(0, 0, 465, 300));
           addChild(wave);
            wave.y = 182;
            
           wave.start();
        }


        
    }

}


//////////////////////////////////////////////////
// Waveクラス
//////////////////////////////////////////////////

import flash.display.Sprite;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.geom.ColorTransform;
import flash.filters.BlurFilter;
import flash.display.BlendMode;
import frocessing.math.PerlinNoise;
//import org.libspark.utils.GeomUtil;

class Wave extends Sprite {
    private var rect:Rectangle;
    private var container:Sprite;
    private var bitmapData:BitmapData;
    private var bitmap:Bitmap;
    private var points:Array;
    private static var segments:uint = 5;
    private static var ratio:Number = 1/segments;
    private static var color:uint = 0xFFFFFF;
    private var perlin:PerlinNoise;
    private var t:Number = 0;
    private var c:uint = 0;
    private static var tightness:uint = 40;
    private static var colorTrans:ColorTransform;
    private static var blur:BlurFilter;
    private static var point:Point = new Point();

    public function Wave(r:Rectangle) {
        rect = r;
        init();
    }

    private function init():void {
        bitmapData = new BitmapData(rect.width, rect.height, true, 0x00FFFFFF);
        bitmap = new Bitmap(bitmapData);
        addChild(bitmap);
        container = new Sprite();
        addChild(container);
        container.alpha = 0.4;
        container.filters = [new BlurFilter(2, 2, 3)];
        perlin = new PerlinNoise();
        colorTrans = new ColorTransform(1, 1, 1, 0.6, 0, 0, 0, 0);
        blur = new BlurFilter(8, 8, 3);
        blendMode = BlendMode.HARDLIGHT;
    }
    public function start():void {
        addEventListener(Event.ENTER_FRAME, update, false, 0, true);
    }
    private function update(evt:Event):void {
        container.graphics.clear();
        for (var n:uint = 0; n < 6; n++) {
            var offset:Number = (n < 3) ? n*0.25 : (n + 1)*0.25;
            setup(offset);
            draw();
        }
        bitmapData.lock();
        bitmapData.draw(container, null, colorTrans, BlendMode.LAYER, rect, true);
        bitmapData.applyFilter(bitmapData, rect, point, blur);
        bitmapData.unlock();
    }
    private function setup(offset:Number):void {
        points = new Array();
        points.push(new Point(- rect.width*ratio, rect.height*0.5));
        for (var n:uint = 1; n <= segments + 1; n++) {
            var px:Number = n*rect.width*ratio;
            var py:Number = (perlin.noise(n*0.25, t + offset)*0.8 + 0.1)*rect.height;
            points.push(new Point(px - rect.width*ratio, py));
        }
        t += 0.001;
        points.push(new Point(rect.width*(1 + ratio), rect.height*0.5));
        points.unshift(points[0]);
        points.push(points[points.length - 1]);
    }
    private function draw():void {
        container.graphics.lineStyle(0, color, 0.5);
        container.graphics.moveTo(points[0].x, points[0].y);
        for (var p:uint = 0; p < points.length - 3; p++) {
            var p0:Point = points[p];
            var p1:Point = points[p + 1];
            var p2:Point = points[p + 2];
            var p3:Point = points[p + 3];
            for (var s:uint = 1; s < tightness + 1; s++) {
                //var px:Number = GeomUtil.spline(p0.x, p1.x, p2.x, p3.x, s/tightness);
                //var py:Number = GeomUtil.spline(p0.y, p1.y, p2.y, p3.y, s/tightness);
                var px:Number = spline(p0.x, p1.x, p2.x, p3.x, s/tightness);
                var py:Number = spline(p0.y, p1.y, p2.y, p3.y, s/tightness);
                container.graphics.lineTo(px, py);
            }
        }
    }
    private 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;
    }

}



//////////////////////////////////////////////////
// Backgroundクラス
//////////////////////////////////////////////////

import flash.display.Shape;
import flash.geom.Rectangle;
import flash.geom.Matrix;
import flash.display.GradientType;
import flash.display.SpreadMethod;
import flash.display.InterpolationMethod;

class Background extends Shape {
    private static var colors:Array = [0x000000, 0x7f7f7f, 0xffffff];
    private static var alphas:Array = [1, 1, 1];
    private static var ratios:Array = [0, 153, 255];

    public function Background() {
        draw();
    }

    private function draw():void {
        var matrix:Matrix = new Matrix();
        matrix.createGradientBox(1600, 1600, 0, - 560, - 800);
        graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, matrix, SpreadMethod.PAD, InterpolationMethod.RGB, 0);
        graphics.drawRect(0, 0, 800, 600);
        graphics.endFill();
    }

}