zoukankan      html  css  js  c++  java
  • 星尘粒子系统PixelHandler 像素粒子大量爆发的代码例子

    package  {
        import idv.cjcat.stardust.common.clocks.Clock;
        import idv.cjcat.stardust.common.initializers.Color;
        import idv.cjcat.stardust.common.initializers.Mass;
        import idv.cjcat.stardust.common.math.UniformRandom;
        import idv.cjcat.stardust.twoD.actions.Deflect;
        import idv.cjcat.stardust.twoD.actions.Gravity;
        import idv.cjcat.stardust.twoD.actions.Move;
        import idv.cjcat.stardust.twoD.actions.SpeedLimit;
        import idv.cjcat.stardust.twoD.deflectors.WrappingBox;
        import idv.cjcat.stardust.twoD.emitters.Emitter2D;
        import idv.cjcat.stardust.twoD.fields.BitmapField;
        import idv.cjcat.stardust.twoD.initializers.Position;
        import idv.cjcat.stardust.twoD.zones.RectZone;
        
        public class PixelEmitter extends Emitter2D {
            
            public var field:BitmapField;
            
            public function PixelEmitter(clock:Clock) {
                super(clock);
                
                //initializers
                addInitializer(new Color(0x33CCFF));
                addInitializer(new Position(new RectZone(0, 0, 640, 480)));
                addInitializer(new Mass(new UniformRandom(5, 2)));
                
                //actions
                field = new BitmapField(0, 60);
                field.massless = false;
                field.scaleX = field.scaleY = 2;
                var gravity:Gravity = new Gravity();
                gravity.addField(field);
                var deflect:Deflect = new Deflect();
                deflect.addDeflector(new WrappingBox(0, 0, 640, 480));
                addAction(gravity);
                addAction(deflect);
                addAction(new Move());
                addAction(new SpeedLimit(2));
            }
        }
    }
     
     
    package
    {
        
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.BitmapDataChannel;
        import flash.display.Sprite;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        import flash.events.TimerEvent;
        import flash.geom.Rectangle;
        import flash.utils.Timer;
        import flash.utils.getTimer;
        
        import idv.cjcat.stardust.common.clocks.Clock;
        import idv.cjcat.stardust.common.clocks.ImpulseClock;
        import idv.cjcat.stardust.common.emitters.Emitter;
        import idv.cjcat.stardust.twoD.handlers.PixelHandler;
        
        import net.hires.debug.Stats;
     
        public class TestStardust1 extends Sprite
        {
            protected var stats:Stats;
            protected var container:Sprite;
            protected var emitter:Emitter;
            
            private var pixelBmpd:BitmapData;
            private var pixelBmp:Bitmap;
            
            //时钟
            private var clock:ImpulseClock;
            
            //????
            private var turbulenceBMPD:BitmapData;
            
            public function TestStardust1()
            {
                stage.scaleMode = StageScaleMode.NO_SCALE;
                
                root.scrollRect = new Rectangle(0, 0, 640, 480);
                this.stage.frameRate = 50;
                stats = new Stats();
                addChild(stats);
                
                this.container = new Sprite();
                addChild(container);
                
                this.pixelBmpd = new BitmapData(640,480,true,0);
                this.pixelBmp = new Bitmap(this.pixelBmpd);
                
                container.addChild(this.pixelBmp);
                
                turbulenceBMPD = new BitmapData(320,240,false);
                
                clock  = new ImpulseClock(800);
                clock.impulse();
                
                this.emitter = new PixelEmitter(clock);
                emitter.particleHandler = new PixelHandler(this.pixelBmpd);
                
                this.addEventListener(Event.ENTER_FRAME,onEnterFrame);
                
                var timer:Timer = new Timer(1500);
                timer.addEventListener(TimerEvent.TIMER, tick);
                timer.start();
                tick();
            }
            
            private function tick(e:TimerEvent = null):void
            {
                this.turbulenceBMPD.perlinNoise(100,100,2,int(Math.random()*100),false,false,BitmapDataChannel.RED | BitmapDataChannel.GREEN);
                PixelEmitter(emitter).field.update(this.turbulenceBMPD);
            }
            
            private function onEnterFrame(e:Event):void
            {
                this.pixelBmpd.unlock();
                this.pixelBmpd.fillRect(this.pixelBmpd.rect,0);
                this.emitter.step();
                this.pixelBmpd.unlock();
            }
        }
    }
    此代码的效果是生成随机的大量像素粒子效果。
  • 相关阅读:
    011-通过网络协议解析网络请求-DNS-ARP-TCPIP
    010-HTTP协议
    009-DNS域名解析系统
    008-ICMP协议(网络控制文协议)
    007-IP报文协议
    007-排序算法-堆排序
    006-排序算法-希尔排序
    007-Linux 查看端口
    005-排序算法-归并排序
    004-排序算法-选择排序
  • 原文地址:https://www.cnblogs.com/holycy/p/2234948.html
Copyright © 2011-2022 走看看