notice: Flash editor updated! Join the development! Thanks to MiniBuilder


forked from : bkzen's 10万個ぱーてぃくる [diff(17)]

embed

FAVORITE BY
:
particle 高速
:
10k part LinkedList
:
:
:
:
:
bitmapdataparticles
:
:
display 1000 particles mvt blue wave
:
イテレーション
:
うちのPCだとあまり変わらなかったけど、会社のPCだと違いがくっきり
:
:
bitmapdataparticle事件です!パーティクルが10万個も動いてます。
:
イテレーションの部分に注目
:
Particle配列でアクセスしない。簡易イテレータ。なるほどー
:
パーティクル祭単方向リンクリスト+>>0でintキャスト.
:
Particle洗濯機みたいな SSL っぽさ
:
FORKED

forked from: 10万個ぱーてぃくる - 軽く高速化 forked from: forked from: 10万個ぱーてぃくる - 軽く高速化 [diff(1)]

  1. // forked from beinteractive's forked from: 10万個ぱーてぃくる - 軽く高速化
  2. // forked from bkzen's 10万個ぱーてぃくる
  3. package  
  4. {
  5.     import flash.display.Sprite;
  6.     import flash.display.StageAlign;
  7.     import flash.display.StageScaleMode;
  8.     import flash.events.Event;
  9.     import flash.events.MouseEvent;
  10.     import net.hires.debug.Stats;
  11.     
  12.     /**
  13.      * なんかいっぱい動かすテスト
  14.      * 洗濯機みたいになってます。
  15.      * @author jc at bk-zen.com
  16.      */
  17.     [SWF(backgroundColor = "0x000000", frameRate = "30")]
  18.     public class Test3 extends Sprite
  19.     {
  20.         protected const NUM_OF_PARTICLES: int = 100000;
  21.         private var main: TestMain;
  22.         
  23.         public function Test3() 
  24.         {
  25.             if (stage) init();
  26.             else addEventListener(Event.ADDED_TO_STAGE, init);
  27.         }
  28.         
  29.         private function init(e:Event = null):void 
  30.         {
  31.             removeEventListener(Event.ADDED_TO_STAGE, init);
  32.             //
  33.             main = new TestMain(stage.stageWidth, stage.stageHeight, NUM_OF_PARTICLES);
  34.             addChild(main.view);
  35.             addChild(new Stats());
  36.             stage.scaleMode = StageScaleMode.NO_SCALE;
  37.             stage.align = StageAlign.TOP_LEFT;
  38.             stage.addEventListener(Event.RESIZE, onResize);
  39.             stage.addEventListener(MouseEvent.CLICK, onClick);
  40.             addEventListener(Event.ENTER_FRAME, onEnter);
  41.             
  42.         }
  43.         
  44.         private function onClick(e:MouseEvent):void 
  45.         {
  46.             main.change();
  47.         }
  48.         
  49.         private function onEnter(e:Event):void 
  50.         {
  51.             main.draw(mouseX, mouseY);
  52.         }
  53.         // りサイズ (未実装)
  54.         private function onResize(e:Event):void 
  55.         {
  56.             main.resize(stage.stageWidth, stage.stageHeight);
  57.         }
  58.     }
  59. }
  60. import flash.display.Bitmap;
  61. import flash.display.BitmapData;
  62. import flash.geom.ColorTransform;
  63. import flash.geom.Point;
  64. import flash.utils.ByteArray;
  65. class TestMain
  66. {
  67.     private var w: int;
  68.     private var h: int;
  69.     private var mw: int;
  70.     private var mh: int;
  71.     public var view: Bitmap;
  72.     private var bmpData: BitmapData;
  73.     private var forceMap: BitmapData;
  74.     private var randomSeed: int;
  75.     private var particles: Particle;
  76.     private var num: int;
  77.     private var color: uint = 0xF0F0FF;
  78.     private var count: int = 0;
  79.     private var colorTr: ColorTransform;
  80.     
  81.     public function TestMain(w: int, h: int, numOfParticles: int)
  82.     {
  83.         this.w = w;
  84.         mw = w >> 1;
  85.         this.h = h;
  86.         mh = h >> 1;
  87.         bmpData = new BitmapData(w, h, false, 0x00000000);
  88.         forceMap = new BitmapData(mw, mh, false);
  89.         forceMap.perlinNoise(mw >> 1, mh >> 14, Math.random() * 0xFFFF, falsetrue3);
  90.         view = new Bitmap(bmpData);
  91.         num = numOfParticles;
  92.         var i: int;
  93.         var prev: Particle = particles = new Particle();
  94.         var p: Particle;
  95.         while (++i <= num)
  96.         {
  97.             p = new Particle();
  98.             p.x = Math.random() * w;
  99.             p.y = Math.random() * h;
  100.             prev.next = p;
  101.             prev = p;
  102.         }
  103.         colorTr = new ColorTransform(1111, -32, -16, -16);
  104.     }
  105.     // 描画、マウスの判定を後で追加予定
  106.     public function draw(mouseX: Number, mouseY: Number): void
  107.     {
  108.         var p: Particle = particles;
  109.         var col: uint;
  110.         bmpData.lock();
  111.         bmpData.colorTransform(bmpData.rect, colorTr);
  112.         while ((p = p.next) != null)
  113.         {
  114.             col = forceMap.getPixel(p.x >> 1, p.y >> 1);
  115.             p.x += (p.vx = p.vx * 0.98 + (( col >> 16 & 0xff)-128) * 0.004);
  116.             p.y += (p.vy = p.vy * 0.98 + (( col >> 8 & 0xff)-128) * 0.004);
  117.             if (p.x < 0) p.x += w;
  118.             else if (p.x >= w) p.x -= w;
  119.             if (p.y < 0) p.y += h;
  120.             else if (p.y >= h) p.y -= h;
  121.             bmpData.setPixel(p.x >> 0, p.y >> 0, color);
  122.         }
  123.         bmpData.unlock();
  124.     }
  125.     
  126.     public function change(): void
  127.     {
  128.         forceMap.perlinNoise(mw, mh, 4, Math.random() * 0xFFFF, falsetrue7);
  129.     }
  130.     
  131.     public function resize(w: Number, h: Number): void
  132.     {
  133.         this.w = w;
  134.         this.h = h;
  135.         if (bmpData) 
  136.         {
  137.             bmpData.dispose();
  138.         }
  139.         bmpData = new BitmapData(w, h, false, 0x00000000);
  140.         view.bitmapData = bmpData;
  141.     }
  142. }
  143. class Particle
  144. {
  145.     public var x: Number = 0;
  146.     public var y: Number = 0;
  147.     public var vx: Number = 0;
  148.     public var vy: Number = 0;
  149.     public var next: Particle;
  150.     
  151.     public function Particle()
  152.     {
  153.         
  154.     }
  155. }
noswf

forked from: 10万個ぱーてぃくる - 軽く高速化 forked from: forked from: 10万個ぱーてぃくる - 軽く高速化 [diff(2)]

  1. // forked from beinteractive's forked from: 10万個ぱーてぃくる - 軽く高速化
  2. // forked from bkzen's 10万個ぱーてぃくる
  3. package  
  4. {
  5.     import flash.display.Sprite;
  6.     import flash.display.StageAlign;
  7.     import flash.display.StageScaleMode;
  8.     import flash.events.Event;
  9.     import flash.events.MouseEvent;
  10.     import net.hires.debug.Stats;
  11.     
  12.     /**
  13.      * なんかいっぱい動かすテスト
  14.      * 洗濯機みたいになってます。
  15.      * @author jc at bk-zen.com
  16.      */
  17.     [SWF(backgroundColor = "0x000000", frameRate = "30")]
  18.     public class Test3 extends Sprite
  19.     {
  20.         protected const NUM_OF_PARTICLES: int = 100000;
  21.         private var main: TestMain;
  22.         
  23.         public function Test3() 
  24.         {
  25.             if (stage) init();
  26.             else addEventListener(Event.ADDED_TO_STAGE, init);
  27.         }
  28.         
  29.         private function init(e:Event = null):void 
  30.         {
  31.             removeEventListener(Event.ADDED_TO_STAGE, init);
  32.             //
  33.             main = new TestMain(stage.stageWidth, stage.stageHeight, NUM_OF_PARTICLES);
  34.             addChild(main.view);
  35.             addChild(new Stats());
  36.             stage.scaleMode = StageScaleMode.NO_SCALE;
  37.             stage.align = StageAlign.TOP_LEFT;
  38.             stage.addEventListener(Event.RESIZE, onResize);
  39.             stage.addEventListener(MouseEvent.CLICK, onClick);
  40.             addEventListener(Event.ENTER_FRAME, onEnter);
  41.             
  42.         }
  43.         
  44.         private function onClick(e:MouseEvent):void 
  45.         {
  46.             main.change();
  47.         }
  48.         
  49.         private function onEnter(e:Event):void 
  50.         {
  51.             main.draw(mouseX, mouseY);
  52.         }
  53.         // りサイズ (未実装)
  54.         private function onResize(e:Event):void 
  55.         {
  56.             main.resize(stage.stageWidth, stage.stageHeight);
  57.         }
  58.     }
  59. }
  60. import flash.display.Bitmap;
  61. import flash.display.BitmapData;
  62. import flash.geom.ColorTransform;
  63. import flash.geom.Point;
  64. import flash.utils.ByteArray;
  65. class TestMain
  66. {
  67.     private var w: int;
  68.     private var h: int;
  69.     private var mw: int;
  70.     private var mh: int;
  71.     public var view: Bitmap;
  72.     private var bmpData: BitmapData;
  73.     private var forceMap: BitmapData;
  74.     private var randomSeed: int;
  75.     private var particles: Particle;
  76.     private var num: int;
  77.     private var color: uint = 0xF0F0FF;
  78.     private var count: int = 0;
  79.     private var colorTr: ColorTransform;
  80.     
  81.     public function TestMain(w: int, h: int, numOfParticles: int)
  82.     {
  83.         this.w = w;
  84.         mw = w >> 1;
  85.         this.h = h;
  86.         mh = h >> 1;
  87.         bmpData = new BitmapData(w, h, false, 0x00000000);
  88.         forceMap = new BitmapData(mw, mh, false);
  89.         forceMap.perlinNoise(mw >> 1, mh >> 14, Math.random() * 0xFFFF, falsetrue3);
  90.         view = new Bitmap(bmpData);
  91.         num = numOfParticles;
  92.         var i: int;
  93.         var prev: Particle = particles = new Particle();
  94.         var p: Particle;
  95.         while (++i <= num)
  96.         {
  97.             p = new Particle();
  98.             p.x = Math.random() * w;
  99.             p.y = Math.random() * h;
  100.             prev.next = p;
  101.             prev = p;
  102.         }
  103.         colorTr = new ColorTransform(.5, .5, .51);//, -32, -16, -16);
  104.     }
  105.     // 描画、マウスの判定を後で追加予定
  106.     public function draw(mouseX: Number, mouseY: Number): void
  107.     {
  108.         var p: Particle = particles;
  109.         var col: uint;
  110.         bmpData.lock();
  111.         bmpData.colorTransform(bmpData.rect, colorTr);
  112.         while ((p = p.next) != null)
  113.         {
  114.             col = forceMap.getPixel(p.x >> 1, p.y >> 1);
  115.             p.x += (p.vx = p.vx * 0.98 + (( col >> 16 & 0xff)-128) * 0.004);
  116.             p.y += (p.vy = p.vy * 0.98 + (( col >> 8 & 0xff)-128) * 0.004);
  117.             if (p.x < 0) p.x += w;
  118.             else if (p.x >= w) p.x -= w;
  119.             if (p.y < 0) p.y += h;
  120.             else if (p.y >= h) p.y -= h;
  121.             bmpData.setPixel(p.x >> 0, p.y >> 0, color);
  122.         }
  123.         bmpData.unlock();
  124.     }
  125.     
  126.     public function change(): void
  127.     {
  128.         forceMap.perlinNoise(mw, mh, 4, Math.random() * 0xFFFF, falsetrue7);
  129.     }
  130.     
  131.     public function resize(w: Number, h: Number): void
  132.     {
  133.         this.w = w;
  134.         this.h = h;
  135.         if (bmpData) 
  136.         {
  137.             bmpData.dispose();
  138.         }
  139.         bmpData = new BitmapData(w, h, false, 0x00000000);
  140.         view.bitmapData = bmpData;
  141.     }
  142. }
  143. class Particle
  144. {
  145.     public var x: Number = 0;
  146.     public var y: Number = 0;
  147.     public var vx: Number = 0;
  148.     public var vy: Number = 0;
  149.     public var next: Particle;
  150.     
  151.     public function Particle()
  152.     {
  153.         
  154.     }
  155. }
noswf

forked from: 10万個ぱーてぃくる - 軽く高速化 forked from: forked from: 10万個ぱーてぃくる - 軽く高速化 [diff(5)]

  1. // forked from beinteractive's forked from: 10万個ぱーてぃくる - 軽く高速化
  2. // forked from bkzen's 10万個ぱーてぃくる
  3. package  
  4. {
  5.     import flash.display.Sprite;
  6.     import flash.display.StageAlign;
  7.     import flash.display.StageScaleMode;
  8.     import flash.events.Event;
  9.     import flash.events.MouseEvent;
  10.     import net.hires.debug.Stats;
  11.     
  12.     /**
  13.      * なんかいっぱい動かすテスト
  14.      * 洗濯機みたいになってます。
  15.      * @author jc at bk-zen.com
  16.      */
  17.     [SWF(backgroundColor = "0x000000", frameRate = "30")]
  18.     public class Test3 extends Sprite
  19.     {
  20.         protected const NUM_OF_PARTICLES: int = 100000;
  21.         private var main: TestMain;
  22.         
  23.         public function Test3() 
  24.         {
  25.             if (stage) init();
  26.             else addEventListener(Event.ADDED_TO_STAGE, init);
  27.         }
  28.         
  29.         private function init(e:Event = null):void 
  30.         {
  31.             removeEventListener(Event.ADDED_TO_STAGE, init);
  32.             //
  33.             main = new TestMain(stage.stageWidth, stage.stageHeight, NUM_OF_PARTICLES);
  34.             addChild(main.view);
  35.             addChild(new Stats());
  36.             stage.scaleMode = StageScaleMode.NO_SCALE;
  37.             stage.align = StageAlign.TOP_LEFT;
  38.             stage.addEventListener(Event.RESIZE, onResize);
  39.             stage.addEventListener(MouseEvent.CLICK, onClick);
  40.             addEventListener(Event.ENTER_FRAME, onEnter);
  41.             
  42.         }
  43.         
  44.         private function onClick(e:MouseEvent):void 
  45.         {
  46.             main.change();
  47.         }
  48.         
  49.         private function onEnter(e:Event):void 
  50.         {
  51.             main.draw(mouseX, mouseY);
  52.         }
  53.         // りサイズ (未実装)
  54.         private function onResize(e:Event):void 
  55.         {
  56.             main.resize(stage.stageWidth, stage.stageHeight);
  57.         }
  58.     }
  59. }
  60. import flash.display.Bitmap;
  61. import flash.display.BitmapData;
  62. import flash.geom.ColorTransform;
  63. import flash.geom.Point;
  64. import flash.utils.ByteArray;
  65. class TestMain
  66. {
  67.     private var w: int;
  68.     private var h: int;
  69.     private var mw: int;
  70.     private var mh: int;
  71.     public var view: Bitmap;
  72.     private var bmpData: BitmapData;
  73.     private var forceMap: BitmapData;
  74.     private var randomSeed: int;
  75.     private var particles: Particle;
  76.     private var num: int;
  77.     private var color: uint = 0xF0F0FF;
  78.     private var count: int = 0;
  79.     private var colorTr: ColorTransform;
  80.     
  81.     public function TestMain(w: int, h: int, numOfParticles: int)
  82.     {
  83.         this.w = w;
  84.         mw = w >> 1;
  85.         this.h = h;
  86.         mh = h >> 1;
  87.         bmpData = new BitmapData(w, h, false, 0x00000000);
  88.         forceMap = new BitmapData(mw, mh, false);
  89.         forceMap.perlinNoise(mw >> 1, mh >> 14, Math.random() * 0xFFFF, falsetrue3);
  90.         view = new Bitmap(bmpData);
  91.         num = numOfParticles;
  92.         var i: int;
  93.         var prev: Particle = particles = new Particle();
  94.         var p: Particle;
  95.         while (++i <= num)
  96.         {
  97.             p = new Particle();
  98.             p.x = Math.random() * w;
  99.             p.y = Math.random() * h;
  100.             prev.next = p;
  101.             prev = p;
  102.         }
  103.         colorTr = new ColorTransform(1111, -8, -4, -4);
  104.     }
  105.     // 描画、マウスの判定を後で追加予定
  106.     public function draw(mouseX: Number, mouseY: Number): void
  107.     {
  108.         var p: Particle = particles;
  109.         
  110.         bmpData.lock();
  111.         bmpData.colorTransform(bmpData.rect, colorTr);
  112.         while ((p = p.next) != null)
  113.         {
  114.             var col:uint = forceMap.getPixel(p.x >> 1, p.y >> 1);
  115.             p.x += (p.vx = p.vx * 0.98 + (( col >> 16 & 0xff)-128) * 0.004);
  116.             p.y += (p.vy = p.vy * 0.98 + (( col >> 8 & 0xff)-128) * 0.004);
  117.             if (p.x < 0) p.x += w;
  118.             else if (p.x >= w) p.x -= w;
  119.             if (p.y < 0) p.y += h;
  120.             else if (p.y >= h) p.y -= h;
  121.             bmpData.setPixel(p.x >> 0, p.y >> 0, color);
  122.         }
  123.                 
  124.         bmpData.unlock();
  125.     }
  126.     
  127.     public function change(): void
  128.     {
  129.         forceMap.perlinNoise(mw, mh, 4, Math.random() * 0xFFFF, falsetrue7);
  130.     }
  131.     
  132.     public function resize(w: Number, h: Number): void
  133.     {
  134.         this.w = w;
  135.         this.h = h;
  136.         if (bmpData) 
  137.         {
  138.             bmpData.dispose();
  139.         }
  140.         bmpData = new BitmapData(w, h, false, 0x00000000);
  141.         view.bitmapData = bmpData;
  142.     }
  143. }
  144. class Particle
  145. {
  146.     public var x: Number = 0;
  147.     public var y: Number = 0;
  148.     public var vx: Number = 0;
  149.     public var vy: Number = 0;
  150.     public var next: Particle;
  151.     
  152.     public function Particle()
  153.     {
  154.         
  155.     }
  156. }
noswf

forked from: 10万個ぱーてぃくる - 軽く高速化 炎上シマスタ [diff(43)]

  1. // forked from beinteractive's forked from: 10万個ぱーてぃくる - 軽く高速化
  2. // forked from bkzen's 10万個ぱーてぃくる
  3. package  
  4. {
  5.     import flash.display.Sprite;
  6.     import flash.display.StageAlign;
  7.     import flash.display.StageScaleMode;
  8.     import flash.events.Event;
  9.     import flash.events.MouseEvent;
  10.     import net.hires.debug.Stats;
  11.     
  12.     /**
  13.      * なんかいっぱい動かすテスト
  14.      * 洗濯機みたいになってます。
  15.      * @author jc at bk-zen.com
  16.      */
  17.     [SWF(backgroundColor = "0x000000", frameRate = "30")]
  18.     public class Test3 extends Sprite
  19.     {
  20.         protected const NUM_OF_PARTICLES: int = 100000;
  21.         private var main: TestMain;
  22.         
  23.         public function Test3() 
  24.         {
  25.             if (stage) init();
  26.             else addEventListener(Event.ADDED_TO_STAGE, init);
  27.         }
  28.         
  29.         private function init(e:Event = null):void 
  30.         {
  31.             removeEventListener(Event.ADDED_TO_STAGE, init);
  32.             //
  33.             main = new TestMain(stage.stageWidth, stage.stageHeight, NUM_OF_PARTICLES);
  34.             addChild(main.view);
  35.             addChild(new Stats());
  36.             stage.scaleMode = StageScaleMode.NO_SCALE;
  37.             stage.align = StageAlign.TOP_LEFT;
  38.             stage.addEventListener(Event.RESIZE, onResize);
  39.             stage.addEventListener(MouseEvent.CLICK, onClick);
  40.             addEventListener(Event.ENTER_FRAME, onEnter);
  41.             
  42.         }
  43.         
  44.         private function onClick(e:MouseEvent):void 
  45.         {
  46.             main.change();
  47.         }
  48.         
  49.         private function onEnter(e:Event):void 
  50.         {
  51.             main.draw(mouseX, mouseY);
  52.         }
  53.         // りサイズ (未実装)
  54.         private function onResize(e:Event):void 
  55.         {
  56.             main.resize(stage.stageWidth, stage.stageHeight);
  57.         }
  58.     }
  59. }
  60. import flash.display.Bitmap;
  61. import flash.display.BitmapData;
  62. import flash.geom.ColorTransform;
  63. import flash.geom.Point;
  64. import flash.utils.ByteArray;
  65. import flash.utils.Timer;
  66. import flash.events.TimerEvent;
  67. import flash.filters.BlurFilter;
  68. class TestMain
  69. {
  70.     private var w: int;
  71.     private var h: int;
  72.     private var mw: int;
  73.     private var mh: int;
  74.     public var view: Bitmap;
  75.     private var bmpData: BitmapData;
  76.         private var buf: BitmapData;
  77.     private var forceMap: BitmapData;
  78.     private var randomSeed: int;
  79.     private var particles: Particle;
  80.         private var bf: BlurFilter;
  81.         private var rPalette: Array;
  82.         private var gPalette: Array;
  83.         private var bPalette: Array;
  84.     private var num: int;
  85.     private var color: uint = 0xFFFFFF;
  86.     private var count: int = 0;
  87.     private var colorTr: ColorTransform;
  88.     
  89.     public function TestMain(w: int, h: int, numOfParticles: int)
  90.     {
  91.         this.w = w;
  92.         mw = w >> 1;
  93.         this.h = h;
  94.         mh = h >> 1;
  95.         bmpData = new BitmapData(w, h, false, 0x00000000);
  96.                 buf = bmpData.clone();
  97.         forceMap = new BitmapData(mw, mh, false);
  98.         forceMap.perlinNoise(mw >> 1, mh >> 14, Math.random() * 0xFFFF, falsetrue3);
  99.         view = new Bitmap(bmpData);
  100.                 bf = new BlurFilter( 16163 );
  101.                 rPalette = new Array256 );
  102.                 gPalette = new Array256 );
  103.                 bPalette = new Array256 );
  104.         num = numOfParticles;
  105.         var i: int;
  106.         var prev: Particle = particles = new Particle();
  107.         var p: Particle;
  108.         while (++i <= num)
  109.         {
  110.             p = new Particle();
  111.             p.x = Math.random() * w;
  112.             p.y = Math.random() * h;
  113.             prev.next = p;
  114.             prev = p;
  115.         }
  116.                 for ( var n:int = 0; n <= 0xff; ++n ) {
  117.                     if ( n < 0xcc ) {
  118.                     rPalette[n] = 0xff000000 | Math.min( 1.5*n, 0xff ) << 16 | Math.min( 1.2*n, 0xff ) << 8;
  119.                 } else {
  120.                     rPalette[n] = 0xff000000 | Math.min( 1.5*n, 0xff ) << 16 | Math.min( 1.2*n, 0xff ) << 8 | ( n - 0xcc ) * 5;
  121.                 }
  122.                     
  123.                     gPalette[n] = 0;
  124.                     bPalette[n] = 0;
  125.                 }
  126.         colorTr = new ColorTransform(1111, -8, -8, -8);
  127.                 
  128.                 var timer:Timer = new Timer( 50000 );
  129.                 timer.addEventListener( TimerEvent.TIMER,
  130.                     function( e:TimerEvent ):void {
  131.                         change();
  132.                     }
  133.                 );
  134.                 timer.start();
  135.           }
  136.     // 描画、マウスの判定を後で追加予定
  137.     public function draw(mouseX: Number, mouseY: Number): void
  138.     {
  139.         var p: Particle = particles;
  140.         var col: uint;
  141.         
  142.         buf.colorTransform(buf.rect, colorTr);
  143.         while ((p = p.next) != null)
  144.         {
  145.             col = forceMap.getPixel(p.x >> 1, p.y >> 1);
  146.             p.x += (p.vx = p.vx * 0.98 + (( col >> 16 & 0xff)-128) * 0.004);
  147.             p.y += (p.vy = p.vy * 0.98 + (( col >> 8 & 0xff)-128) * 0.004);
  148.             if (p.x < 0) p.x += w;
  149.             else if (p.x >= w) p.x -= w;
  150.             if (p.y < 0) p.y += h;
  151.             else if (p.y >= h) p.y -= h;
  152.             buf.setPixel(p.x >> 0, p.y >> 0, color);
  153.         }
  154.                 bmpData.lock();
  155.                 bmpData.applyFilter( buf, buf.rect, buf.rect.topLeft, bf );
  156.                 bmpData.paletteMap( bmpData, bmpData.rect, bmpData.rect.topLeft, rPalette, gPalette, bPalette );
  157.                 bmpData.unlock();
  158.     }
  159.     
  160.     public function change(): void
  161.     {
  162.         forceMap.perlinNoise(mw, mh, 4, Math.random() * 0xFFFF, falsetrue7);
  163.     }
  164.     
  165.     public function resize(w: Number, h: Number): void
  166.     {
  167.         this.w = w;
  168.         this.h = h;
  169.         if (bmpData) 
  170.         {
  171.             bmpData.dispose();
  172.         }
  173.         bmpData = new BitmapData(w, h, false, 0x00000000);
  174.         view.bitmapData = bmpData;
  175.     }
  176. }
  177. class Particle
  178. {
  179.     public var x: Number = 0;
  180.     public var y: Number = 0;
  181.     public var vx: Number = 0;
  182.     public var vy: Number = 0;
  183.     public var next: Particle;
  184.     
  185.     public function Particle()
  186.     {
  187.         
  188.     }
  189. }
noswf

forked from: 10万個ぱーてぃくる - 軽く高速化 forked from: forked from: 10万個ぱーてぃくる - 軽く高速化 [diff(1)]

  1. // forked from beinteractive's forked from: 10万個ぱーてぃくる - 軽く高速化
  2. // forked from bkzen's 10万個ぱーてぃくる
  3. package  
  4. {
  5.     import flash.display.Sprite;
  6.     import flash.display.StageAlign;
  7.     import flash.display.StageScaleMode;
  8.     import flash.events.Event;
  9.     import flash.events.MouseEvent;
  10.     import net.hires.debug.Stats;
  11.     
  12.     /**
  13.      * なんかいっぱい動かすテスト
  14.      * 洗濯機みたいになってます。
  15.      * @author jc at bk-zen.com
  16.      */
  17.     [SWF(backgroundColor = "0x000000", frameRate = "30")]
  18.     public class Test3 extends Sprite
  19.     {
  20.         protected const NUM_OF_PARTICLES: int = 100000;
  21.         private var main: TestMain;
  22.         
  23.         public function Test3() 
  24.         {
  25.             if (stage) init();
  26.             else addEventListener(Event.ADDED_TO_STAGE, init);
  27.         }
  28.         
  29.         private function init(e:Event = null):void 
  30.         {
  31.             removeEventListener(Event.ADDED_TO_STAGE, init);
  32.             //
  33.             main = new TestMain(stage.stageWidth, stage.stageHeight, NUM_OF_PARTICLES);
  34.             addChild(main.view);
  35.             addChild(new Stats());
  36.             stage.scaleMode = StageScaleMode.NO_SCALE;
  37.             stage.align = StageAlign.TOP_LEFT;
  38.             stage.addEventListener(Event.RESIZE, onResize);
  39.             stage.addEventListener(MouseEvent.CLICK, onClick);
  40.             addEventListener(Event.ENTER_FRAME, onEnter);
  41.             
  42.         }
  43.         
  44.         private function onClick(e:MouseEvent):void 
  45.         {
  46.             main.change();
  47.         }
  48.         
  49.         private function onEnter(e:Event):void 
  50.         {
  51.             main.draw(mouseX, mouseY);
  52.         }
  53.         // りサイズ (未実装)
  54.         private function onResize(e:Event):void 
  55.         {
  56.             main.resize(stage.stageWidth, stage.stageHeight);
  57.         }
  58.     }
  59. }
  60. import flash.display.Bitmap;
  61. import flash.display.BitmapData;
  62. import flash.geom.ColorTransform;
  63. import flash.geom.Point;
  64. import flash.utils.ByteArray;
  65. class TestMain
  66. {
  67.     private var w: int;
  68.     private var h: int;
  69.     private var mw: int;
  70.     private var mh: int;
  71.     public var view: Bitmap;
  72.     private var bmpData: BitmapData;
  73.     private var forceMap: BitmapData;
  74.     private var randomSeed: int;
  75.     private var particles: Particle;
  76.     private var num: int;
  77.     private var color: uint = 0xF0F0FF;
  78.     private var count: int = 0;
  79.     private var colorTr: ColorTransform;
  80.     
  81.     public function TestMain(w: int, h: int, numOfParticles: int)
  82.     {
  83.         this.w = w;
  84.         mw = w >> 1;
  85.         this.h = h;
  86.         mh = h >> 1;
  87.         bmpData = new BitmapData(w, h, false, 0x00000000);
  88.         forceMap = new BitmapData(mw, mh, false);
  89.         forceMap.perlinNoise(mw >> 1, mh >> 14, Math.random() * 0xFFFF, falsetrue3);
  90.         view = new Bitmap(bmpData);
  91.         num = numOfParticles;
  92.         var i: int;
  93.         var prev: Particle = particles = new Particle();
  94.         var p: Particle;
  95.         while (++i <= num)
  96.         {
  97.             p = new Particle();
  98.             p.x = Math.random() * w;
  99.             p.y = Math.random() * h;
  100.             prev.next = p;
  101.             prev = p;
  102.         }
  103.         colorTr = new ColorTransform(1111, -32, -16, -16);
  104.     }
  105.     // 描画、マウスの判定を後で追加予定
  106.     public function draw(mouseX: Number, mouseY: Number): void
  107.     {
  108.         var p: Particle = particles;
  109.         var col: uint;
  110.         bmpData.lock();
  111.         bmpData.colorTransform(bmpData.rect, colorTr);
  112.         while ((p = p.next) != null)
  113.         {
  114.             col = forceMap.getPixel(p.x >> 1, p.y >> 1);
  115.             p.x += (p.vx = p.vx * 0.98 + (( col >> 16 & 0xff)-128) * 0.004);
  116.             p.y += (p.vy = p.vy * 0.98 + (( col >> 8 & 0xff)-128) * 0.004);
  117.             if (p.x < 0) p.x += w;
  118.             else if (p.x >= w) p.x -= w;
  119.             if (p.y < 0) p.y += h;
  120.             else if (p.y >= h) p.y -= h;
  121.             bmpData.setPixel(p.x >> 0, p.y >> 0, color);
  122.         }
  123.         bmpData.unlock();
  124.     }
  125.     
  126.     public function change(): void
  127.     {
  128.         forceMap.perlinNoise(mw, mh, 4, Math.random() * 0xFFFF, falsetrue7);
  129.     }
  130.     
  131.     public function resize(w: Number, h: Number): void
  132.     {
  133.         this.w = w;
  134.         this.h = h;
  135.         if (bmpData) 
  136.         {
  137.             bmpData.dispose();
  138.         }
  139.         bmpData = new BitmapData(w, h, false, 0x00000000);
  140.         view.bitmapData = bmpData;
  141.     }
  142. }
  143. class Particle
  144. {
  145.     public var x: Number = 0;
  146.     public var y: Number = 0;
  147.     public var vx: Number = 0;
  148.     public var vy: Number = 0;
  149.     public var next: Particle;
  150.     
  151.     public function Particle()
  152.     {
  153.         
  154.     }
  155. }
noswf
Get Adobe Flash Player