flash on 2011-9-11

by yurji
♥0 | Line 169 | Modified 2011-09-15 16:28:43 | MIT License
play

ActionScript3 source code

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

package
{
    import flash.text.*;
    import flash.display.*;
    import flash.events.*;
    import flash.utils.*;
    import flash.geom.*;
    import flash.filters.*;
    import org.papervision3d.core.proto.MaterialObject3D;
    
    import caurina.transitions.Tweener;
    import caurina.transitions.properties.CurveModifiers;
    
    import org.papervision3d.cameras.*;
    import org.papervision3d.materials.*;
    import org.papervision3d.objects.*;
    import org.papervision3d.objects.primitives.*
    import org.papervision3d.view.*;
    import org.papervision3d.view.layer.*;
    import org.papervision3d.core.render.filter.*;
    import org.papervision3d.core.effects.*;
    import org.papervision3d.core.effects.utils.*;
    
    import caurina.transitions.Tweener;
    
    [SWF(width = "1024", height = "768", frameRate = "30", backgroundColor = "#001020")]
    
    public class Main extends BasicView
    {    
        private var bfx:BitmapEffectLayer;
        
        // テキストフィールドオブジェクトを作成する
        private var textfld:TextField = new TextField();
        
        /**
         * Constructor
         */
        public function Main()
        {
            
            addEventListener(Event.ENTER_FRAME, onEnter);
            
            // 表示リストに登録する
            //stage.addChild(label2);
            
            addChild(textfld);
            
            
            // init
            super(stage.stageWidth, stage.stageHeight, true, false, CameraType.FREE);
            
            // create the effect layer
            bfx = new BitmapEffectLayer(viewport, 1024, 768, true, 0, BitmapClearMode.CLEAR_PRE);
            bfx.addEffect(new BitmapLayerEffect( new BlurFilter(2, 2, 1)));
            bfx.addEffect(new BitmapColorEffect(1.2, 1.15, 1.1, .95));
            bfx.drawCommand = new BitmapDrawCommand(null, new ColorTransform(1, 1, 1, 0.5), BlendMode.ADD);
            bfx.drawLayer.blendMode = BlendMode.ADD;
            viewport.containerSprite.addLayer(bfx);
            
            
            // update
            //var timer:Timer = new Timer(2500);
            //timer.addEventListener(TimerEvent.TIMER, timerHandler);
            //timer.start();
            
            //マテリアル設定
            var material  :MaterialObject3D;
            material = new BitmapFileMaterial( "hanabi.jpg" );
            material.doubleSided = true;
            
            // create the Field
            //var field:Plane = new Plane(material, 5000, 5000, 10, 10);
            //field.rotationX = 90;
            //scene.addChild(field);
            
            // init camera
            camera.y = 200;
            camera.z = -1000;
            camera.rotationX = -20;
            camera.focus = 500;
            camera.zoom = 1;
            stage.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void
            {
                //camera.y = camera.y == 200 ? 1500 : 200;
                //camera.rotationX = camera.rotationX == -20 ? 45 : -20;
                var x:Number = Math.random() * 1000 - 500;
                //var z:Number = Math.random() * 1000 - 500;
                var z:Number = 0;
                var y:Number = Math.random() * 250 + 750;
                var size:Number = Math.random() * 1000;
                
                //ones(x, y, z);
                makeLine(x, y, z,size);
            });
            
            // render
            startRendering();
        }
        
        /**
         * Timer Handler - Give Fireworks
         * @param    event
         */
        private function timerHandler(event:TimerEvent):void
        {
            var fireworks:DisplayObject3D = createFireworks(400);
            fireworks.x = Math.random() * 1000 - 500;
            fireworks.z = Math.random() * 1000 - 500;
            fireworks.y = Math.random() * 250 + 750;
            
            scene.addChild(fireworks);
            
            Tweener.addTween(fireworks,
            {
                y          : fireworks.y  - 200,
                time       : 4,
                transition : "easeInSine"
            });
        }
        
        private function ones(localX, localY, localZ, size):void
        {
            var fireworks:DisplayObject3D = createFireworks(size);
            fireworks.x = localX;
            fireworks.z = localZ;
            fireworks.y = localY;
            scene.addChild(fireworks);
            
            

            //テスト用文字
            var format:TextFormat=new TextFormat();
            format.color=0xFF0000;
            format.font ="_等幅";
            format.size =12; 

            Tweener.addTween(fireworks,
            {
                y          : fireworks.y  - 200,
                time       : 4,
                //delay:10,
                transition : "easeInSine"
            });
            
            textfld.x = 50;
            textfld.y = 50;
            textfld.width  = 500;
            textfld.height = 20;
            textfld.setTextFormat(format);
            textfld.text = "x:" + fireworks.x + " y:" + fireworks.y + " size:" + size;
            
            textfld.setTextFormat(format);
            
            
            //ここまで

        }
        
        function makeLine(localX,localY,localZ,size):void 
        {
            var color:uint = Math.random() * 0xFFFFFF;
            var mat:ColorMaterial = new ColorMaterial(color);
            mat.doubleSided = true;
            
            var particle:Plane = new Plane(mat, 5, 5, 1, 1);
            
            var fireworks :DisplayObject3D = new DisplayObject3D();
            
            particle.x = localX;
            particle.y = localY - 300;
            particle.z = localZ;
            
            
            fireworks.addChild(particle);
            bfx.addDisplayObject3D(particle);

            
            Tweener.addTween(particle,
            {
                x     : localX,
                y     : localY,
                z     : localZ,
                time  : 3 + Math.random() * .5,
                delay:0,
                transition : "easeOutCubic",
                onCompleteParams : [particle],
                onComplete : function(p:Plane):void
                {
                    fireworks.removeChild(p);
                    bfx.removeDisplayObject3D(p);
                    
                    ones(localX, localY, localZ, size);
                }
            });
            
            scene.addChild(fireworks);
        }
        
        /**
         * Create Fireworks
         * @return Fireworks(DisplayObject3D)
         */
        private function createFireworks(size):DisplayObject3D
        {
            var fireworks :DisplayObject3D = new DisplayObject3D();
            
            var points:Array = getSpherePoints(size, 15);
            
            var color:uint = Math.random() * 0xFFFFFF;
            
            //var particle2:Plane = new Plane(mat, 5, 5, 1, 1);
            //fireworks.addChild(particle2);
            //CurveModifiers.init();   
            //bfx.addDisplayObject3D(particle2);
            // Tweener.addTween(particle2,
            //     {
            //         x:0,
            //         y:370,
            //         alpha:1,
            //         time:1.5,
            //         delay:0,
            //         transition:'easeOutCubic',
            //         onComplete: function(p:Plane):void
            //         {
            //             fireworks.removeChild(p);
            //             bfx.removeDisplayObject3D(p);
            //         }
//,
//                     _bezier:[{x:100,y:100},{x:0,y:100},{x:0,y:300}]});          
            
            
            
            for (var i:int = 0; i < points.length; i++ )
            {
                var mat:ColorMaterial = new ColorMaterial(color);
                mat.doubleSided = true;
                
                var particle:Plane = new Plane(mat, 5, 5, 1, 1);
                
                
                fireworks.addChild(particle);
                
                
                            
                
                bfx.addDisplayObject3D(particle);
                
                
                 
                    
                
                
                Tweener.addTween(particle,
                {
                    x     : points[i].x,
                    y     : points[i].y,
                    z     : points[i].z,
                    time  : 3 + Math.random() * .5,
                    delay:0,
                    transition : "easeOutCubic",
                    onCompleteParams : [particle],
                    onComplete : function(p:Plane):void
                    {
                        fireworks.removeChild(p);
                        bfx.removeDisplayObject3D(p);
                    }
                });
            }
            
            return fireworks;
        }
        
        /**
         * Get Points of sphere
         * @param    size
         * @param    segment
         * @return  point of shphere
         */
        private function getSpherePoints(size:int, segment:int):Array
        {
            var points:Array = [];
            
            var sphere:Sphere = new Sphere(new WireframeMaterial(), size, segment, segment);
            
            for each(var i:* in sphere.geometry.vertices)
                points.push( { x:i.x, y:i.y, z:i.z } );
            
            return points;
        }
        
        private var rot:Number = 0;
        public function onEnter(e:Event):void
        {
            //sphere.rotationY += 1;
            //sphere.rotationX += 1;
           
           rot += 0.5 // 毎フレーム角度を0.5度ずつ足していく
     
          // 角度に応じてカメラの位置を設定
            //camera.x = 1000 * Math.sin(rot * Math.PI / 180)
            //camera.z = 1000 * Math.cos(rot * Math.PI / 180) 
            
        }


    }
}