SWFProfilerをデフォルトで表示する
デバッグのお供に com.flashdynamix.utils.SWFProfiler を重宝してます。Tweensyパッケージに同梱されてるユーティリティで、FPSやメモリ使用量をグラフ表示してくれて超便利。
使い方は、SWF上で右クリックで出てくるコンテキストメニューに追加される"Show Profiler"から表示を切り替えるんだけど、デフォルトで表示しないことになってる。
ちょろっと手を加えてデフォルトでも表示できるように SWFProfiler.init() 関数を変更してみた。
- ActionScript
- SWFProfiler.as
- Source
public static function init(context : InteractiveObject, display:Boolean = false/* ←ココ */) : void {
if(inited) return;
inited = true;
stage = context.stage;
content = new ProfilerContent();
frame = new Sprite();
minFps = Number.MAX_VALUE;
maxFps = Number.MIN_VALUE;
minMem = Number.MAX_VALUE;
maxMem = Number.MIN_VALUE;
var cm : ContextMenu = new ContextMenu();
cm.hideBuiltInItems();
ci = new ContextMenuItem("Show Profiler", true);
cm.customItems = [ci];
context.contextMenu = cm;
addEvent(ci, ContextMenuEvent.MENU_ITEM_SELECT, onSelect);
start();
if (display) show(); /* ←ココ */
}- public static function init(context : InteractiveObject, display:Boolean = false/* ←ココ */) : void {
- if(inited) return;
- inited = true;
- stage = context.stage;
- content = new ProfilerContent();
- frame = new Sprite();
- minFps = Number.MAX_VALUE;
- maxFps = Number.MIN_VALUE;
- minMem = Number.MAX_VALUE;
- maxMem = Number.MIN_VALUE;
- var cm : ContextMenu = new ContextMenu();
- cm.hideBuiltInItems();
- ci = new ContextMenuItem("Show Profiler", true);
- cm.customItems = [ci];
- context.contextMenu = cm;
- addEvent(ci, ContextMenuEvent.MENU_ITEM_SELECT, onSelect);
- start();
- if (display) show(); /* ←ココ */
- }
この二箇所の変更で、右クリックから表示を切り替えなくても SWFProfiler.init() の第二引数に true を渡してあげればデフォルトで表示されるようになる。もちろんその後、右クリックから"Hide Profiler"で消すこともできる。
制作の課程でロジック実装とか検証とかデバッグ中は true にしとけば一々右クリックしなくていいから楽。で、制作が進むにつれ false にして、リリース時には SWFProfiler を消すと。
- ActionScript
- TestClass_SWFProfiler.as
- Source
package {
import com.flashdynamix.motion.Tweensy;
import com.flashdynamix.motion.TweensyTimeline;
import com.flashdynamix.utils.SWFProfiler;
import flash.display.Graphics;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Point;
[SWF(backgroundColor = 0x000000, width = 600, height = 400, frameRate = 30)]
public class TestClass_SWFProfiler extends Sprite {
public function TestClass_SWFProfiler() {
SWFProfiler.init(this, true);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(e:Event):void {
var star:Shape = createStar();
var stageWidth:Number = stage.stageWidth;
var stageHeight:Number = stage.stageHeight;
star.x = stageWidth / 2;
star.y = stageHeight / 2;
var targetScale:Number = Math.random() * 5 + 5;
var tweensyTimeline:TweensyTimeline = Tweensy.to(
star, {
x: Math.random() * stageWidth,
y: Math.random() * stageHeight,
scaleX: targetScale,
scaleY: targetScale,
rotation: -360 + Math.random() * 720,
alpha: 0
}, Math.random() * 2 + 1
);
tweensyTimeline.onComplete = onTweensyComplete;
tweensyTimeline.onCompleteParams = [tweensyTimeline, star];
addChildAt(star, 0);
}
private function onTweensyComplete(tweensyTimeline:TweensyTimeline, star:Shape):void {
tweensyTimeline.dispose();
removeChild(star);
}
private function createStar():Shape {
var star:Shape = new Shape();
var g:Graphics = star.graphics;
var commands:Vector. = new Vector.(10, true);
var data:Vector. = new Vector.(20, true);
var i:int, radius:Number, angle:Number, coord:Point;
var innerRadius:Number = Math.random() * 30;
var outerRadius:Number = innerRadius + 10 + Math.random() * 10;
var unit:Number = Math.PI / 5;
for (i = 0; i < 10; i ++) {
commands[i] = (i == 0)? 1: 2;
radius = (i % 2 == 0)? outerRadius: innerRadius;
angle = -Math.PI / 2 + unit * i;
coord = Point.polar(radius, angle);
data[i * 2] = coord.x;
data[i * 2 + 1] = coord.y;
}
var color:uint = Math.random() * 0xffffff;
g.beginFill(color);
g.drawPath(commands, data);
g.endFill();
return star;
}
}
} - package {
- import com.flashdynamix.motion.Tweensy;
- import com.flashdynamix.motion.TweensyTimeline;
- import com.flashdynamix.utils.SWFProfiler;
- import flash.display.Graphics;
- import flash.display.Shape;
- import flash.display.Sprite;
- import flash.events.Event;
- import flash.geom.Point;
- [SWF(backgroundColor = 0x000000, width = 600, height = 400, frameRate = 30)]
- public class TestClass_SWFProfiler extends Sprite {
- public function TestClass_SWFProfiler() {
- SWFProfiler.init(this, true);
- addEventListener(Event.ENTER_FRAME, onEnterFrame);
- }
- private function onEnterFrame(e:Event):void {
- var star:Shape = createStar();
- var stageWidth:Number = stage.stageWidth;
- var stageHeight:Number = stage.stageHeight;
- star.x = stageWidth / 2;
- star.y = stageHeight / 2;
- var targetScale:Number = Math.random() * 5 + 5;
- var tweensyTimeline:TweensyTimeline = Tweensy.to(
- star, {
- x: Math.random() * stageWidth,
- y: Math.random() * stageHeight,
- scaleX: targetScale,
- scaleY: targetScale,
- rotation: -360 + Math.random() * 720,
- alpha: 0
- }, Math.random() * 2 + 1
- );
- tweensyTimeline.onComplete = onTweensyComplete;
- tweensyTimeline.onCompleteParams = [tweensyTimeline, star];
- addChildAt(star, 0);
- }
- private function onTweensyComplete(tweensyTimeline:TweensyTimeline, star:Shape):void {
- tweensyTimeline.dispose();
- removeChild(star);
- }
- private function createStar():Shape {
- var star:Shape = new Shape();
- var g:Graphics = star.graphics;
- var commands:Vector.<int> = new Vector.<int>(10, true);
- var data:Vector.<number> = new Vector.<number>(20, true);
- var i:int, radius:Number, angle:Number, coord:Point;
- var innerRadius:Number = Math.random() * 30;
- var outerRadius:Number = innerRadius + 10 + Math.random() * 10;
- var unit:Number = Math.PI / 5;
- for (i = 0; i < 10; i ++) {
- commands[i] = (i == 0)? 1: 2;
- radius = (i % 2 == 0)? outerRadius: innerRadius;
- angle = -Math.PI / 2 + unit * i;
- coord = Point.polar(radius, angle);
- data[i * 2] = coord.x;
- data[i * 2 + 1] = coord.y;
- }
- var color:uint = Math.random() * 0xffffff;
- g.beginFill(color);
- g.drawPath(commands, data);
- g.endFill();
- return star;
- }
- }
- }
ちなみにTweensyの作者のブログで公開されてるAS3 SWF Profilerのソースと、Tweensyに同梱されてるソースとでは関数の引数とか多少違うみたい。今回の解説は、Tweensyに同梱されてる方の SWFProfiler ですよ。
About this entry
You’re currently reading “SWFProfilerをデフォルトで表示する,” an entry on jp.ferv.blog
- Published:
- Fri, May 22nd, 2009 at 2:03 AM
- Author:
- dsk
- Category:
- Web
- Tags:
- ActionScript 3.0, SWFProfiler

No comments
Jump to comment form | comments rss | trackback uri