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の影響を調べてみました。
/**
* 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;
}
}
}