# Keeping a consistent spawn rate using the Timer class

**URL:** <https://forum.kirupa.com/t/keeping-a-consistent-spawn-rate-using-the-timer-class/326759>\
**Category:** flash\
**Created:** [January 10, 2012, 6:11pm UTC](https://forum.kirupa.com/t/keeping-a-consistent-spawn-rate-using-the-timer-class/326759 "2012-01-10T18:11:14Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![IgiveUp](https://avatars.discourse-cdn.com/v4/letter/i/8c91f0/32.png) [@IgiveUp](https://forum.kirupa.com/u/IgiveUp)\
**Post date:** [January 10, 2012, 6:11pm UTC](https://forum.kirupa.com/t/keeping-a-consistent-spawn-rate-using-the-timer-class/326759/1 "2012-01-10T18:11:14Z")

</div>

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)

```auto

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);
        }
    }
}

```
