※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

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


forked from : coppieeee's パーティクルの応用で弾幕2 - 早くなったよ~ [diff(11)]

FORKED

forked from: パーティクルの応用で弾幕2 - 早くなったよ~ forked from: forked from: パーティクルの応用で弾幕2 - 早くなったよ~ [diff(1)]

  1. // forked from adkOHTAH's forked from: パーティクルの応用で弾幕2 - 早くなったよ~
  2. // forked from coppieeee's パーティクルの応用で弾幕2 - 早くなったよ~
  3. // forked from coppieeee's 弾幕 - パーティクルの応用で弾幕
  4. //コードのリファクタリング & 最適化
  5. //
  6. // Nicolasが最適化してくれました。
  7. // http://wonderfl.net/code/63f88f2189846bdc7275a01d5d228b1607344e51
  8. // BitmapData#draw() を BitmapData#coloyPixces() に変えるだけ!
  9. // めっちゃ早いよ!これ!
  10. package 
  11. {
  12.     import flash.display.Bitmap;
  13.     import flash.display.BitmapData;
  14.     import flash.display.Graphics;
  15.     import flash.display.Shape;
  16.     import flash.display.Sprite;
  17.     import flash.events.Event;
  18.     import flash.geom.ColorTransform;
  19.     import flash.geom.Matrix;
  20.     import flash.geom.Point;
  21.     import flash.geom.Rectangle;
  22.     import flash.text.TextField;
  23.     import flash.text.TextFieldAutoSize;
  24.     import net.hires.debug.Stats;
  25.         import flash.filters.*;
  26.     [SWF(frameRate="60",width="512",height="512" )]
  27.     public class PShooting extends Sprite 
  28.     {
  29.         public static const WIDTH:Number = 512;
  30.         public static const HEIGHT:Number = 512;
  31.         
  32.         //弾のビットマップキャッシュ
  33.         private var _bulletImg:BitmapData;
  34.         //キャンバス
  35.         private var _canvas:BitmapData;
  36.         //パーティクルリスト
  37.         private var _particles:Vector.<Particle>;
  38.         //敵。というか弾の再生位置。
  39.         private var _enemy:Particle;
  40.                 //Random Color
  41.                 private var ranCol:Number = Math.random()*0xFFFFFF;
  42.         
  43.         
  44.         public function PShooting()
  45.         {
  46.             //Wonderfl.capture_delay( 7 );
  47.             
  48.             //キャンバスの生成
  49.             _canvas = new BitmapData(WIDTH, HEIGHT,false,0x000000);
  50.             var cb:Bitmap = new Bitmap(_canvas);
  51.             addChild(cb);
  52.             
  53.             _particles = new Vector.<Particle>();
  54.             _enemy = new Particle(0,0,0,0);
  55.             
  56.             //弾のBitmapの生成
  57.             //Shapeに円を書く。
  58.             var shape:Shape = new Shape();
  59.             var g:Graphics = shape.graphics;
  60.             g.beginFill(0x333333,0.5);
  61.             g.drawCircle(111);
  62.             g.beginFill(0xCCCCCC);
  63.             g.drawCircle(111);
  64.             g.endFill();
  65.             
  66.             //BitmapDataにdraw()
  67.             _bulletImg = new BitmapData(shape.width, shape.height, true, ranCol);
  68.             _bulletImg.draw(shape);
  69.             
  70.             //Statsの生成
  71.             var stats:Stats = new Stats();
  72.             addChild(stats);
  73.             addEventListener(Event.ENTER_FRAME, onEnterFrame);
  74.             
  75.             //particlsの個数表示用のTextField生成
  76.             var tf:TextField = new TextField();
  77.             tf.y = 100;
  78.             tf.textColor = 0xFFFFFF;
  79.             tf.background = true;
  80.             tf.backgroundColor = 0x000000;
  81.             tf.autoSize = TextFieldAutoSize.LEFT;
  82.             addChild(tf);
  83.             addEventListener(Event.ENTER_FRAME, function(e:Event):void {
  84.                 tf.text = "bullets:"+_particles.length;
  85.             });
  86.         }
  87.         private var _radius:Number = 0;
  88.         private function onEnterFrame(e:Event):void
  89.         {
  90.             _canvas.lock();
  91.             var cr:Rectangle = new Rectangle(00, _canvas.width, _canvas.height);
  92.             var ct:ColorTransform = new ColorTransform (0.40.40.4);
  93.             _canvas.colorTransform(cr, ct);
  94.                         
  95.             
  96.             //弾の生成場所をマウスのところへ移動
  97.             _enemy.vx = (stage.mouseX - _enemy.x) * 0.05;
  98.             _enemy.vy = (stage.mouseY - _enemy.y)*0.05;
  99.             _enemy.x += _enemy.vx;
  100.             _enemy.y += _enemy.vy;
  101.             
  102.             
  103.             //回転
  104.             _radius += (Math.PI * 2 / 180) * 62.1;
  105.             
  106.             //一フレームあたりの弾の生成数
  107.             var bCount:int = 10;
  108.             var bRadius:Number = _radius;
  109.             
  110.             for (var i:int = 0; i <bCount; i++ )
  111.             {
  112.                 var vx:Number = Math.cos(bRadius) * 3;
  113.                 var vy:Number = Math.sin(bRadius) * 3;
  114.                 var newP:Particle = new Particle(_enemy.x, _enemy.y, vx, vy);
  115.                 _particles.push(newP);
  116.                 bRadius += Math.PI *2 / bCount;
  117.             }
  118.             
  119.             var removedParticles:Vector.<Particle> = new Vector.<Particle>();
  120.             
  121.             //弾の移動
  122.             for each(var p:Particle in _particles)
  123.             {
  124.                 p.x += p.vx;
  125.                 p.y += p.vy;
  126.                 p.vx += p.ax;
  127.                 p.vy += p.ay;
  128.                 
  129.                 var radius:Number = Math.atan2(p.vy, p.vx);
  130.                 var speed:Number = Math.sqrt(p.vx * p.vx + p.vy * p.vy );
  131.                 p.ax = Math.cos(radius + Math.PI / 180 * 80) * 0.08;
  132.                 p.ay = Math.sin(radius + Math.PI / 180*80) * 0.08;
  133.                 
  134.                 //画面外に出たらremovedParticlesに登録
  135.                 if (p.x < 0 || p.x > WIDTH || p.y < 0 || p.y > HEIGHT)
  136.                 {
  137.                     removedParticles.push(p);
  138.                     continue;
  139.                 }
  140.                 //弾の描画。一番のボトルネック!(どうしようもないがな)
  141.                 //_canvas.draw(_bulletImg,matrix);
  142.                 
  143.                 //最適化!
  144.                 //draw()じゃなくてcopyPixels()使った方がめっちゃ早いよ!!
  145.                 //早くなったがボトルネックであることは変わらない。
  146.                 var bulletPoint:Point = new Point(p.x - _bulletImg.width/2, p.y - _bulletImg.height/2);
  147.                 _canvas.copyPixels(_bulletImg, _bulletImg.rect, bulletPoint);
  148.             }
  149.             
  150.             //いらない弾を_particlesから消す。
  151.             for each(var removedP:Particle in removedParticles)
  152.             {
  153.                 var index:int = _particles.indexOf(removedP);
  154.                 if (index != -1)
  155.                 {
  156.                     _particles.splice(index, 1);
  157.                 }
  158.             }
  159.             _canvas.unlock();
  160.         }
  161.     }
  162. }
  163. class Particle
  164. {
  165.     public var x:Number;
  166.     public var y:Number;
  167.     public var vx:Number;
  168.     public var vy:Number;
  169.     public var ax:Number = 0;
  170.     public var ay:Number = 0;
  171.     
  172.     public function Particle(x:Number,y:Number,vx:Number,vy:Number)
  173.     {
  174.         this.x = x ;
  175.         this.y = y;
  176.         this.vx = vx;
  177.         this.vy = vy;
  178.     }
  179. }
noswf

forked from: パーティクルの応用で弾幕2 - 早くなったよ~ forked from: forked from: パーティクルの応用で弾幕2 - 早くなったよ~ [diff(1)]

  1. // forked from adkOHTAH's forked from: パーティクルの応用で弾幕2 - 早くなったよ~
  2. // forked from coppieeee's パーティクルの応用で弾幕2 - 早くなったよ~
  3. // forked from coppieeee's 弾幕 - パーティクルの応用で弾幕
  4. //コードのリファクタリング & 最適化
  5. //
  6. // Nicolasが最適化してくれました。
  7. // http://wonderfl.net/code/63f88f2189846bdc7275a01d5d228b1607344e51
  8. // BitmapData#draw() を BitmapData#coloyPixces() に変えるだけ!
  9. // めっちゃ早いよ!これ!
  10. package 
  11. {
  12.     import flash.display.Bitmap;
  13.     import flash.display.BitmapData;
  14.     import flash.display.Graphics;
  15.     import flash.display.Shape;
  16.     import flash.display.Sprite;
  17.     import flash.events.Event;
  18.     import flash.geom.ColorTransform;
  19.     import flash.geom.Matrix;
  20.     import flash.geom.Point;
  21.     import flash.geom.Rectangle;
  22.     import flash.text.TextField;
  23.     import flash.text.TextFieldAutoSize;
  24.     import net.hires.debug.Stats;
  25.         import flash.filters.*;
  26.     [SWF(frameRate="60",width="512",height="512" )]
  27.     public class PShooting extends Sprite 
  28.     {
  29.         public static const WIDTH:Number = 512;
  30.         public static const HEIGHT:Number = 512;
  31.         
  32.         //弾のビットマップキャッシュ
  33.         private var _bulletImg:BitmapData;
  34.         //キャンバス
  35.         private var _canvas:BitmapData;
  36.         //パーティクルリスト
  37.         private var _particles:Vector.<Particle>;
  38.         //敵。というか弾の再生位置。
  39.         private var _enemy:Particle;
  40.                 //Random Color
  41.                 private var ranCol:Number = Math.random()*0xFFFFFF;
  42.         
  43.         
  44.         public function PShooting()
  45.         {
  46.             //Wonderfl.capture_delay( 7 );
  47.             
  48.             //キャンバスの生成
  49.             _canvas = new BitmapData(WIDTH, HEIGHT,false,0x000000);
  50.             var cb:Bitmap = new Bitmap(_canvas);
  51.             addChild(cb);
  52.             
  53.             _particles = new Vector.<Particle>();
  54.             _enemy = new Particle(0,0,0,0);
  55.             
  56.             //弾のBitmapの生成
  57.             //Shapeに円を書く。
  58.             var shape:Shape = new Shape();
  59.             var g:Graphics = shape.graphics;
  60.             g.beginFill(0x333333,0.5);
  61.             g.drawCircle(111);
  62.             g.beginFill(0xCCCCCC);
  63.             g.drawCircle(111);
  64.             g.endFill();
  65.             
  66.             //BitmapDataにdraw()
  67.             _bulletImg = new BitmapData(shape.width, shape.height, true, ranCol);
  68.             _bulletImg.draw(shape);
  69.             
  70.             //Statsの生成
  71.             var stats:Stats = new Stats();
  72.             addChild(stats);
  73.             addEventListener(Event.ENTER_FRAME, onEnterFrame);
  74.             
  75.             //particlsの個数表示用のTextField生成
  76.             var tf:TextField = new TextField();
  77.             tf.y = 100;
  78.             tf.textColor = 0xFFFFFF;
  79.             tf.background = true;
  80.             tf.backgroundColor = 0x000000;
  81.             tf.autoSize = TextFieldAutoSize.LEFT;
  82.             addChild(tf);
  83.             addEventListener(Event.ENTER_FRAME, function(e:Event):void {
  84.                 tf.text = "bullets:"+_particles.length;
  85.             });
  86.         }
  87.         private var _radius:Number = 0;
  88.         private function onEnterFrame(e:Event):void
  89.         {
  90.             _canvas.lock();
  91.             var cr:Rectangle = new Rectangle(00, _canvas.width, _canvas.height);
  92.             var ct:ColorTransform = new ColorTransform (0.40.40.4);
  93.             _canvas.colorTransform(cr, ct);
  94.                         
  95.             
  96.             //弾の生成場所をマウスのところへ移動
  97.             _enemy.vx = (stage.mouseX - _enemy.x) * 0.05;
  98.             _enemy.vy = (stage.mouseY - _enemy.y)*0.05;
  99.             _enemy.x += _enemy.vx;
  100.             _enemy.y += _enemy.vy;
  101.             
  102.             
  103.             //回転
  104.             _radius += (Math.PI * 2 / 180) * 62.1;
  105.             
  106.             //一フレームあたりの弾の生成数
  107.             var bCount:int = 10;
  108.             var bRadius:Number = _radius;
  109.             
  110.             for (var i:int = 0; i <bCount; i++ )
  111.             {
  112.                 var vx:Number = Math.cos(bRadius) * 3;
  113.                 var vy:Number = Math.sin(bRadius) * 3;
  114.                 var newP:Particle = new Particle(_enemy.x, _enemy.y, vx, vy);
  115.                 _particles.push(newP);
  116.                 bRadius += Math.PI *2 / bCount;
  117.             }
  118.             
  119.             var removedParticles:Vector.<Particle> = new Vector.<Particle>();
  120.             
  121.             //弾の移動
  122.             for each(var p:Particle in _particles)
  123.             {
  124.                 p.x += p.vx;
  125.                 p.y += p.vy;
  126.                 p.vx += p.ax;
  127.                 p.vy += p.ay;
  128.                 
  129.                 var radius:Number = Math.atan2(p.vy, p.vx);
  130.                 var speed:Number = Math.sqrt(p.vx * p.vx + p.vy * p.vy );
  131.                 p.ax = Math.cos(radius + Math.PI / 180 * 80) * 0.08;
  132.                 p.ay = Math.sin(radius + Math.PI / 180*80) * 0.08;
  133.                 
  134.                 //画面外に出たらremovedParticlesに登録
  135.                 if (p.x < 0 || p.x > WIDTH || p.y < 0 || p.y > HEIGHT)
  136.                 {
  137.                     removedParticles.push(p);
  138.                     continue;
  139.                 }
  140.                 //弾の描画。一番のボトルネック!(どうしようもないがな)
  141.                 //_canvas.draw(_bulletImg,matrix);
  142.                 
  143.                 //最適化!
  144.                 //draw()じゃなくてcopyPixels()使った方がめっちゃ早いよ!!
  145.                 //早くなったがボトルネックであることは変わらない。
  146.                 var bulletPoint:Point = new Point(p.x - _bulletImg.width/2, p.y - _bulletImg.height/2);
  147.                 _canvas.copyPixels(_bulletImg, _bulletImg.rect, bulletPoint);
  148.             }
  149.             
  150.             //いらない弾を_particlesから消す。
  151.             for each(var removedP:Particle in removedParticles)
  152.             {
  153.                 var index:int = _particles.indexOf(removedP);
  154.                 if (index != -1)
  155.                 {
  156.                     _particles.splice(index, 1);
  157.                 }
  158.             }
  159.             _canvas.unlock();
  160.         }
  161.     }
  162. }
  163. class Particle
  164. {
  165.     public var x:Number;
  166.     public var y:Number;
  167.     public var vx:Number;
  168.     public var vy:Number;
  169.     public var ax:Number = 0;
  170.     public var ay:Number = 0;
  171.     
  172.     public function Particle(x:Number,y:Number,vx:Number,vy:Number)
  173.     {
  174.         this.x = x ;
  175.         this.y = y;
  176.         this.vx = vx;
  177.         this.vy = vy;
  178.     }
  179. }
noswf
Get Adobe Flash Player