Keeping a consistent spawn rate using the Timer class

Basically what I’m trying to do is keep the enemies spawning at the same rate. I get it to work kind of but when I toggle the speed there is a gap between spawns. I figure this is because the timer resets to the new delay. I’m working on a tower defense game and I’m trying to get the fast forward button to work. I made a simple example of the problem I’m having so that I could explain a little better. Any advice on a better way of doing it or how to fix this problem would be very much appreciated. Thanks guys! :pleased:

(you can just copy n paste the code in flash to see what I’m talking about)


import flash.display.*;
import flash.events.*;    
import flash.utils.*;


var enemyTimer:Timer;
var enemySpawnRate:Number = 800;
var enemies:Array = new Array();
var doubleSpeed:Boolean = false;


stage.addEventListener(Event.ENTER_FRAME, loop);
stage.addEventListener(MouseEvent.CLICK, toggleSpeed);
                       
enemyTimer = new Timer(enemySpawnRate);
enemyTimer.addEventListener(TimerEvent.TIMER, spawn);
enemyTimer.start();
function spawn(e:TimerEvent):void
{
    var enemy:MovieClip = new MovieClip();
    enemy.graphics.beginFill(0);
    enemy.graphics.drawRect(0,0,25,25);
    enemy.graphics.endFill();
    enemy.x = stage.stageWidth/2 - enemy.width/2;
    enemy.y = -enemy.height;
    if(!doubleSpeed)
        enemy.velocity = 4;
    else
        enemy.velocity = 8;
    addChild(enemy);
    enemies.push(enemy);
}


function toggleSpeed(e:MouseEvent):void
{
    if(!doubleSpeed)
    {
        enemyTimer.delay = 400;
        for(var i:int = 0; i < enemies.length; i++)
        {
            enemies*.velocity = 8;
        }
        doubleSpeed = true;
    }
    else
    {
        enemyTimer.delay = 800;
        for(i = 0; i < enemies.length; i++)
        {
            enemies*.velocity = 4;
        }
        doubleSpeed = false;
    }
}


function loop(e:Event):void
{
    //move enemies
    for(var i:int = 0; i < enemies.length; i++)
    {
        enemies*.y += enemies*.velocity;
        if(enemies*.y > stage.stageHeight)
        {
            removeChild(enemies*);
            enemies.splice(i,1);
        }
    }
}