ShapeDrawingExpt
♥0 |
Line 97 |
Modified 2012-11-07 11:36:59 |
MIT License
archived:2017-03-20 07:26:25
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");
}
}
}