In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

FrameRate = 0 の検証

FrameRate = 0の時にできること/できないことを知りたかったので検証してみました。

==========
[検証方法]
SliderとPushButtonでFrameRateを動的に調整。
その時、EnterFrame以外のイベントがどんな影響を受けるか調べる。
Slider:0~60の間で変更
PushButton:0、60を切り替える。

[検証項目]
TimerEvent
MouseEvent

[検証結果]
・TimerEventはFrameRateに依存。
(そういえば公式リファレンスにもそんなことが書いてあった気がする。)
・MouseEventは影響なし。いつでもこい。
・実はFrameRate = 0にはならない。
0.01が最小値で、しかも気長に待っているとちゃっかり動いてた。
==========

という結果です。
他に検証項目が思い浮かばなかったので、今回はTimerEventとMouseEventの影響を調べてみました。
Get Adobe Flash player
by geko 16 Sep 2010
    Embed
/**
 * Copyright geko ( http://wonderfl.net/user/geko )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/xQGS
 */

package {
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    import flash.utils.*;
    import com.bit101.components.*;
    
    [SWF(frameRate=60)]
    public class FlashTest extends Sprite {
        public var txt:TextField = new TextField();
        public var ball:Sprite = new Sprite();
        public var timer:Timer = new Timer(33);
        public var label:Label;
        public var bt:PushButton;
        public var slider:HUISlider;
        
        public function FlashTest() {
            addChild(ball);
            addChild(txt);
            label = new Label(this,240);
            bt = new PushButton(this, 0, 0, "stop", function click(event:MouseEvent):void{
                stage.frameRate = bt.label == "stop" ? 0 : 60;
                slider.value = stage.frameRate;
                bt.label = bt.label == "stop" ? "start" : "stop";
                trace(bt.label);
            });
            slider = new HUISlider(this, 0, 0, "", function change(event:Event):void{
                stage.frameRate = slider.value;
                bt.label = stage.frameRate > 0.01 ? "stop" : "start";
                trace("frameRate : " + stage.frameRate);
            });

            
            ball.x = (stage.stageWidth-ball.width)/2;
            ball.y = (stage.stageHeight-ball.height)/2;
            ball.graphics.beginFill(0xDD3322);
            ball.graphics.drawCircle(0, -100, 10);
            ball.graphics.endFill();
            txt.width = stage.stageWidth;
            txt.height = stage.stageHeight;
            txt.mouseEnabled = false;
            label.scaleX = label.scaleY =5;
            bt.x = (stage.stageWidth-bt.width)/2;
            bt.y = (stage.stageHeight-bt.height)/2+10;
            slider.setSize(bt.width+64, bt.height);
            slider.setSliderParams(0, 60, 60);
            slider.x = bt.x-9;
            slider.y = bt.y-20;
            slider.tick = 0.1;
            timer.start();
            
            //イベントの設定
            stage.addEventListener(Event.ENTER_FRAME, enterFrame);
            timer.addEventListener(TimerEvent.TIMER, timerEvent);
            ball.addEventListener(MouseEvent.ROLL_OVER, mouseEvent);
            ball.addEventListener(MouseEvent.ROLL_OUT, mouseEvent);

        }
        
        //EnterFrame
        public function enterFrame(event:Event):void{
            ball.rotation++;
            txt.scrollV = txt.maxScrollV;
            //trace(event.type, ball.rotation);
            if(stage.frameRate < 1) {
                trace("frameRate: "+stage.frameRate, "call from "+event.type);
                //stage.frameRate = stage.frameRate-0.01;
            }
        }
        //TimerEvent
        public function timerEvent(event:TimerEvent):void{
            var time:uint = getTimer()/10;
            var min:String = String(uint(time/6000)%60);
            var sec:String = String(uint(time/100)%60);
            var miri:String = String(time%100);
            label.text = (min.length < 2 ? "0"+min : min)+":"+(sec.length < 2 ? "0"+sec : sec)+":"+(miri.length < 2 ? "0"+miri : miri) ;
        }
        
        //MouseEvent
        public function mouseEvent(event:MouseEvent):void{
            trace(event.type);
        }

        
        public function trace(...str):void{
            txt.appendText(str.toString());
            txt.appendText("\n");
            txt.scrollV = txt.maxScrollV;
        }

    }
}