/** * WebDesining 2010 年 01 月号の SWF チューニング特集 * ActionScript 編で visible を false にする方法のほうが * removeChild メソッドを使用した方法よりも高速になる * と紹介されていた。これに疑問を感じたので検証してみた。 * (メモリ的にはremoveChildのほうが良いと紹介されていたが * それは正しいと思うのでスルー) * * よい検証方法が思いつかなかったので、結果はどちらもあまり変わらず。 * removeChild のほうが良さそうだけど、いかがでしょう? * * 表示/非表示切り替えだけであれば addChild/removeChild より * visible のほうがコストは低そうですが、 * その意味で記事中にまとめられていたのでしょうか。 */ package { import flash.display.*; import flash.events.*; import net.hires.debug.*; import com.bit101.components.*; public class FlashTest extends Sprite { private var arr:Array = []; private var btn0:PushButton; private var btn1:PushButton; private var btn2:PushButton; public function FlashTest() { stage.frameRate = 120; btn0 = new PushButton(this, 10, 10, "no touch", init); btn1 = new PushButton(this, 10, 40, "visible=false", init); btn2 = new PushButton(this, 10, 70, "removeChild", init); } private function init(e:Event):void { removeChild(btn0); removeChild(btn1); removeChild(btn2); for(var i:int=0; i<100; i++) { var sp:Sprite = new Sprite(); for(var j:int=0; j<100; j++) { sp.graphics.beginFill(0xFFFFFF * Math.random()); sp.graphics.drawCircle(20 * (Math.random() - 0.5), 20 * (Math.random() - 0.5), 10); } sp.x = 465 * Math.random(); sp.y = 465 * Math.random(); arr[i] = sp; addChild(sp); if(e.currentTarget == btn1) sp.visible = false; if(e.currentTarget == btn2) removeChild(sp); } addEventListener(Event.ENTER_FRAME, loop); addChild(new Stats); } private function loop(e:Event):void { for(var i:int=0; i<arr.length; i++) { var sp:Sprite = arr[i] ; sp.x --; if(sp.x < 0) sp.x = 465; } } } } [検証] visibleとremoveChild、どっちが高速か