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

新しいENTER_FRAME

0フレーム、1フレームを行き来するムービーを動的に作成して、
mc.addFrameScriptで渡した関数をイベントハンドラ代わりにしています。

これだとEventのインスタンスが作成されないのかな。。。
ならENTER_FRAMEより軽いはず。(未検証だけど)
Get Adobe Flash player
by kacchan6 05 Feb 2011

    Talk

    9re at 05 Feb 2011 21:25
    実際にEvent周りの呼び出しが起きないので軽そうです framescript版 25613 AVMINF: MTHD FlashTest/handler () 25616 AVMINF: MTHD global/flash.utils::getTimer () 25620 AVMINF: MTHD flash.text::TextField/set text () 25647 AVMINF: MTHD FlashTest/handler () 25650 AVMINF: MTHD global/flash.utils::getTimer () 25653 AVMINF: MTHD flash.text::TextField/set text () 25680 AVMINF: MTHD FlashTest/handler () ・・・ eventリスナー版 9502 AVMINF: MTHD flash.events::Event () 9505 AVMINF: MTHD flash.events::Event/ctor () 9507 AVMINF: MTHD MethodInfo-1 () 9510 AVMINF: MTHD global/flash.utils::getTimer () 9513 AVMINF: MTHD flash.text::TextField/set text () 9535 AVMINF: MTHD flash.events::Event () 9538 AVMINF: MTHD flash.events::Event/ctor () 9540 AVMINF: MTHD MethodInfo-1 () 9543 AVMINF: MTHD global/flash.utils::getTimer () 9546 AVMINF: MTHD flash.text::TextField/set text () 9502 AVMINF: MTHD flash.events::Event () ・・・・
    kacchan6 at 05 Feb 2011 23:11
    検証ありがとうございます。自分も作成中のTweenライブラリで検証してみます。 細かいオブジェクトの作成が高頻度で行われることで、 GC回数が増えフレームレートが下がるのが嫌だなぁと思ってました。
    kacchan6 at 06 Feb 2011 00:20
    微々たるものだけど、それなりに効果があるようでした。 フレームレートで平均43.5fpsからで平均44fpsになった感じ。

    Tags

    Embed
package {
    import flash.utils.getTimer;
    import flash.text.TextField;
    import flash.utils.ByteArray;
    import flash.display.MovieClip;
    import flash.display.Loader;
    import flash.display.LoaderInfo;
    import flash.events.Event;
    import flash.display.Sprite;

    public class FlashTest extends Sprite {

        private var _mc:MovieClip;
        
        private var _tf:TextField;

        public function FlashTest() {
            var data:Array = [
                0x4657530a, 0x1a000000, 0x09800000,
                0x02004411, 0x08000000, 0x40004000,
                0x00000000];
            var bytes:ByteArray = new ByteArray();
            for (var i:int = 0, len:uint = data.length; i < len; i++)
            {
                bytes.writeInt(data[i]);
            }

            var loader:Loader = new Loader();
            var info:LoaderInfo = loader.contentLoaderInfo;
            info.addEventListener(Event.COMPLETE, completeHandler);
            loader.loadBytes(bytes);
        }

        private function handler():void
        {
            _tf.text = String(getTimer());
        }

        private function completeHandler(e:Event):void
        {
            var info:LoaderInfo = e.currentTarget as LoaderInfo;
            info.removeEventListener(Event.COMPLETE, completeHandler);

            var loader:Loader = info.loader;
            _mc = loader.content as MovieClip;
            _mc.addFrameScript(0, handler);
            _mc.addFrameScript(1, handler);
            
            _tf = new TextField();
            addChild(_tf);
        }
    }
}