ShapeDrawingExpt

by russ
♥0 | Line 97 | Modified 2012-11-07 11:36:59 | MIT License
play

ActionScript3 source code

/**
 * Copyright russ ( http://wonderfl.net/user/russ )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/6ZGD
 */

package
{
import flash.display.*;
import flash.events.Event;
import flash.geom.Point;
import flash.text.*;
import flash.utils.*;

public class ShapesVsMultiDraw extends Sprite {
    private var _Logger:TextField = new TextField();
    private const NUM_OBJECTS:int = 30e3;
    private const SQUARE_SIZE:uint = 10;
    private const WINDOW_SIZE:uint = 800;
    private var _Result:Bitmap = new Bitmap();

    private var _TestSequence:Array;
    private var _Positions:Vector.<Point>;

    public function ShapesVsMultiDraw() {
        stage.align = StageAlign.TOP_LEFT;
        stage.scaleMode = StageScaleMode.NO_SCALE;

        _Logger.autoSize = TextFieldAutoSize.LEFT;
        addChild(_Logger);

        addChild(_Result);
        _Result.x = 300;

        //Generate the square positions...
        _Positions = _GeneratePositions(NUM_OBJECTS);

        _TestSequence = [
            [_TestShapes,     ["Shapes:     ", _Positions, ]],
            [_TestMultiDraw,  ["MultiDraw:  ", _Positions, ]],
            [_TestSprites,    ["Sprites:    ", _Positions, ]],
        ];

        stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
        log("Using " +  NUM_OBJECTS + " points.\n---");
    }

    private function onEnterFrame(event:Event):void {
        var curTest:Array;
        var func:Function;
        var funcArgs:Array;

        curTest = _TestSequence.shift();
        if(_TestSequence.length == 0) {
            stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
        }

        func = curTest[0] as Function;
        funcArgs = curTest[1] as Array;
        func.apply(this, funcArgs);
    }

    private function _GeneratePositions(Count:uint):Vector.<Point> {
        var ret:Vector.<Point> = new Vector.<Point>();
        for (var i:uint = 0; i < Count; i++) {
            ret.push(new Point(Math.random() * WINDOW_SIZE, Math.random() * WINDOW_SIZE));
        }
        return ret;
    }


    private function _TestShapes(LogMsg:String, Data:Vector.<Point>):void {
        var startTime_ms:uint;
        var bmd:BitmapData = new BitmapData(1000, 1000, false, 0x72A0C1);

        startTime_ms = getTimer();
        for each (var pt:Point in Data) {
            var s:Shape = new Shape();
            s.graphics.beginFill(0xFF0000);
            s.graphics.lineStyle(0);
            s.graphics.drawRect(pt.x,  pt.y,  SQUARE_SIZE, SQUARE_SIZE);
            bmd.draw(s);
        }
        log(LogMsg + (getTimer() - startTime_ms + "ms"));
        _Result.bitmapData = bmd;
    }

    private function _TestSprites(LogMsg:String, Data:Vector.<Point>):void {
        var startTime_ms:uint;
        var bmd:BitmapData = new BitmapData(1000, 1000, false, 0x72A0C1);

        startTime_ms = getTimer();
        for each (var pt:Point in Data) {
            var s:Sprite = new Sprite();
            s.graphics.beginFill(0xFF0000);
            s.graphics.lineStyle(0);
            s.graphics.drawRect(pt.x,  pt.y,  SQUARE_SIZE, SQUARE_SIZE);
            bmd.draw(s);
        }
        log(LogMsg + (getTimer() - startTime_ms + "ms"));
        _Result.bitmapData = bmd;
    }


    private function _TestMultiDraw(LogMsg:String, Data:Vector.<Point>):void {
        var startTime_ms:uint;
        var bmd:BitmapData = new BitmapData(1000, 1000, false, 0x72A0C1);

        var s:Shape = new Shape();
        s.graphics.lineStyle(0);
        for each (var pt:Point in Data) {
            s.graphics.beginFill(0xFF0000 + pt.x + pt.y);
            s.graphics.drawRect(pt.x,  pt.y,  SQUARE_SIZE, SQUARE_SIZE);
        }
        startTime_ms = getTimer();
        bmd.draw(s);
        log(LogMsg + (getTimer() - startTime_ms + "ms"));
        _Result.bitmapData = bmd;
    }


    private function log(msg:*):void {
        _Logger.appendText(msg + "\n");
    }

}
}