:cons: Hello people!
I was wondering if there is anyway to speed the rendering of this little app that I made.
It basically consist on attaching sprites on golden section based paths.
I’m quite new to AS3 and really looking forward to see its potentials.
I tried to boost the framerate to 300 seeing results in the beginning when I just had a couple of variables but now it seems it has slowed down.
anyway here’s the code of the fla:
StageScaleMode.NO_SCALE;
import fl.events.SliderEvent;
stage.frameRate = 300;
/*
* Constants
*/
var leafNumber:Number = 3000;
var g:Number = 1.618033989;
var rad:Number = 20;
//mask the viewer
var myMask:DrawMask = new DrawMask(-150,-150,300,300,viewer);
/*
* Variables
*/
//User Defined
var rGrowth:Number = 1.002;
var degeneration:Number = .001;
var growthX:Number = .5;
var growthY:Number = .5;
//Already defined :)
var mrGrowth:Number = 1.009;
var mgrowthX:Number = 1;
var mgrowthY:Number = 1;
var mdegeneration:Number = .009;
var ga:Number = 360 - (360/g);
var leafx:Number = 0;
var leafy:Number = 0;
var rot:Number = 0;
var leafAlpha:Number = 0;
var curIter:Number = leafNumber;
//
var sliders:Array = [SrGrowth, Sdegeneration, SgrowthX, SgrowthY];
var maxValues:Array = [mrGrowth, mdegeneration, mgrowthX, mgrowthY];
var values:Array = [rGrowth, degeneration, growthX, growthY];
//Setting sliders value according to predefined values stored in the array
for (var i=0; i<values.length; i++) {
var s:Slider = new Slider();
sliders*.minimum = values*;
sliders*.value = values*;
sliders*.maximum = maxValues*;
sliders*.tickInterval = (sliders*.maximum-sliders*.value)/10;
sliders*.snapInterval = sliders*.tickInterval;
sliders*.addEventListener(SliderEvent.THUMB_RELEASE, sliderChange);
}
//Listeners
generate.addEventListener(MouseEvent.CLICK, startIt);
stopBtn.addEventListener(MouseEvent.CLICK, stopIt);
clearBtn.addEventListener(MouseEvent.CLICK, resetIt);
/*
* Handlers for events
*/
function sliderChange(event:SliderEvent) {
var i:Number=0;
for each (var s:Slider in sliders) {
values* = s.value;
i++;
}
}
function startIt(event:Event) {
trace("startDrawing");
addEventListener(Event.ENTER_FRAME, drawLeaves);
}
function resetIt(event:Event) {
rGrowth = 1.009;
growthX = .5;
growthY = .5;
degeneration = .009;
ga= 360 - (360/g);
rad=20;
rot=0;
leafx=0;
leafy=0;
leafAlpha = curIter/leafNumber;
removeEventListener(Event.ENTER_FRAME, drawLeaves);
var children:int = viewer.numChildren;
while (children-- > 1) {
viewer.removeChildAt(children);
}
}
function stopIt(event:Event) {
removeEventListener(Event.ENTER_FRAME, drawLeaves);
}
/*
* rolling drums for ....Main Function !
*/
function drawLeaves(event:Event) {
// if you have still iteration to do
if (curIter) {
curIter--;
// augment the rotation by a goldan angle minus the degeneration variable
ga-=values[1];
rot +=ga;
//augment the radius by rGrowth
rad = rad *values[0];
//make sure it is rotating by a valid angle
rot -= int(rot/360)*360;
//adjust the alpha
leafAlpha = curIter/leafNumber;
//set coordinates for the "leaf"
leafx = Math.cos((Math.PI/180)*rot)*rad;
leafy = Math.sin((Math.PI/180)*rot)*rad;
// draw the leaf
var leaf:DrawLeaf = new DrawLeaf(leafx, leafy, 10*values[2], 10*values[3], rot, leafAlpha);
//add it to the viewer
viewer.addChild(leaf);
} else {
event.target.removeListener;
}
}
and here the one for the main class:
package {
import flash.display.Sprite;
import flash.display.Shape;
// draw the leaf [TODO] extends the types of leaves
public class DrawLeaf extends Sprite {
/*
* Constructor
*/
public function DrawLeaf(x:Number, y:Number, width:Number, height:Number, rotation:Number, alpha:Number) {
var myShape:Shape = new Shape();
myShape.graphics.beginFill(0x000000, alpha);
myShape.graphics.drawEllipse(x, y, width, height);
myShape.rotation = rotation;
addChild(myShape);
this.alpha = alpha;
}
}
}
thaaanks!