mxmlベースで制作した場合の再描画タイミング実験
FPSは0.3
マウスイベントは一切取ってないけど、クリックすると再描画されている。
flexベースでASを使用してプロジェクト組んでると、
遷移時に画面がチラつくなどの表示バグの原因になる。
実行速度低下の原因にもなるかも。
♥6 |
Line 65 |
Modified 2010-10-22 10:32:27 |
MIT License
archived:2017-03-07 22:40:16
ActionScript3 source code
/**
* Copyright tail_y ( http://wonderfl.net/user/tail_y )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/3asK
*/
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
horizontalAlign="left"
addedToStage="first();">
<mx:Script>
<![CDATA[
/**
* FPSは0.3
* マウスイベントは一切取ってないけど、クリックすると再描画されている。
* flexベースでASを使用してプロジェクト組んでると、
* 遷移時に画面がチラつくなどの表示バグの原因になる。
* 実行速度低下の原因にもなるかも。
*/
import mx.core.UIComponent;
import flash.text.TextField;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.display.Sprite;
import flash.events.Event;
private var _view:UIComponent;
private var _timer:Timer;
private var _timerCount:Number = 0;
private var _frameCount:Number = 0;
private var _tf:TextField;
private var _frameCircle:Sprite;
private var _timerCircle:Sprite;
private static const FPS:Number = 0.3;
private static const TPS:Number = 10;
public function first():void{
_view = new UIComponent();
addChild(_view);
stage.frameRate = FPS;
_tf = new TextField();
_tf.width = 200;
_view.addChild(_tf);
_frameCircle = createCircle(0, 200, 0xff8855);
_timerCircle = createCircle(0, 300, 0x88ff55);
_view.addChild(_frameCircle);
_view.addChild(_timerCircle);
addEventListener(Event.ENTER_FRAME, frame);
_timer = new Timer(1000 / TPS);
_timer.addEventListener(TimerEvent.TIMER, timer);
_timer.start();
}
private function timer(event:TimerEvent) : void {
_timerCount++;
_timerCircle.x = (_timerCircle.x + 5) % 400;
draw();
}
private function frame(event:Event) : void {
_frameCount = _timerCount;
_frameCircle.x = _timerCircle.x;
draw();
}
private function draw():void {
var str:String = "";
str += "クリックすると、\n画面が再描画されている?" + "\n";
str += "frameCount=" + _frameCount + "\n";
str += "timerCount=" + _timerCount + "\n";
_tf.text = str;
}
private function createCircle(x:Number, y:Number, color:uint) : Sprite {
var ans:Sprite = new Sprite();
ans.graphics.beginFill(color);
ans.graphics.drawCircle(0, 0, 20);
ans.x = x;
ans.y = y;
return ans;
}
]]>
</mx:Script>
</mx:Application>