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

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

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


FORKED

[検証] visibleとremoveChild、どっちが高速か forked from: [検証] visibleとremoveChild、どっちが高速か [diff(9)]

  1. // forked from clockmaker's [検証] visibleとremoveChild、どっちが高速か
  2. /**
  3. * WebDesining 2010 年 01 月号の SWF チューニング特集
  4. * ActionScript 編で visible を false にする方法のほうが
  5. * removeChild メソッドを使用した方法よりも高速になる
  6. * と紹介されていた。これに疑問を感じたので検証してみた。
  7. * (メモリ的にはremoveChildのほうが良いと紹介されていたが
  8. *  それは正しいと思うのでスルー)
  9. *
  10. * よい検証方法が思いつかなかったので、結果はどちらもあまり変わらず。
  11. * 常識的に考えると removeChild のほうが良さそうだけど、
  12. * いかがでしょう?
  13. *
  14. * 表示/非表示切り替えだけであれば addChild/removeChild より
  15. * visible のほうがコストは低そうですが、
  16. * その意味で WD にまとめられていたのでしょうか。
  17. */
  18. package {
  19.     import flash.display.*;
  20.     import flash.events.*;
  21.     import net.hires.debug.*;
  22.     import com.bit101.components.*;
  23.     
  24.     public class FlashTest extends Sprite {
  25.         private var arr:Array = [];
  26.         private var btn0:PushButton;
  27.         private var btn1:PushButton;
  28.         private var btn2:PushButton;
  29.         public function FlashTest() {
  30.             stage.frameRate = 120;
  31.             
  32.             btn0 = new PushButton(this1010"no touch", init);
  33.             btn1 = new PushButton(this1040"visible=false", init);
  34.             btn2 = new PushButton(this1070"removeChild", init);
  35.         }
  36.         
  37.         private function init(e:Event):void
  38.         {
  39.             removeChild(btn0);
  40.             removeChild(btn1);
  41.             removeChild(btn2);
  42.             
  43.             for(var i:int=0; i<100; i++)
  44.             {
  45.                 var sp:Sprite = new Sprite();
  46.                 for(var j:int=0; j<100; j++)
  47.                 {
  48.                     sp.graphics.beginFill(0xFFFFFF * Math.random());
  49.                     sp.graphics.drawCircle(20 * (Math.random() - 0.5), 20 * (Math.random() - 0.5), 10);
  50.                 }
  51.                 sp.x = 465 * Math.random();
  52.                 sp.y = 465 * Math.random();
  53.                 arr[i] = sp;
  54.                 addChild(sp);
  55.                 
  56.                 sp.addEventListener(MouseEvent.CLICK, clickHandler);
  57.                 
  58.                 if(e.currentTarget == btn1) sp.visible = false;
  59.                 if(e.currentTarget == btn2) removeChild(sp);
  60.             }
  61.             
  62.             addEventListener(Event.ENTER_FRAME, loop);
  63.             
  64.             addChild(new Stats);
  65.         }
  66.         
  67.         private function clickHandler(event:MouseEvent):void
  68.         {
  69.                 trace(event.currentTarget);
  70.             }
  71.         
  72.         private function loop(e:Event):void
  73.         {
  74.             for(var i:int=0; i<arr.length; i++)
  75.             {
  76.                 var sp:Sprite = arr[i] ;
  77.                 sp.x --;
  78.                 if(sp.x < 0)
  79.                     sp.x = 465;
  80.             }
  81.         }
  82.     }
  83. }
noswf
Get Adobe Flash Player