lundi 28 décembre 2015

Randomly generate enemies faster and faster Javascript

Hey I am using a Spawn function I found for a javascript game I am creating to randomy generate enemies to click on. But it is very slow and I would like it to be able to generate faster and faster.. is it possible to modify this code in that way? the spawn function is at the end of the code.

function Gem(Class, Value, MaxTTL) {
            this.Class = Class;
            this.Value = Value;
            this.MaxTTL = MaxTTL;
        };

    var gems = new Array();
    gems[0] = new Gem('green', 10, 0.5);
    gems[1] = new Gem('blue', 20, 0.4);
    gems[2] = new Gem('red', 50, 0.6);

    function Click(event)
    {
        if(event.preventDefault) event.preventDefault();
        if (event.stopPropagation) event.stopPropagation();
        else event.cancelBubble = true;

        var target = event.target || event.srcElement;

        if(target.className.indexOf('gem') > -1){
            var value = parseInt(target.getAttribute('data-value'));
            var current = parseInt( score.innerHTML );
            var audio = new Audio('music/blaster.mp3');
            audio.play();
            score.innerHTML = current + value;
            target.parentNode.removeChild(target);

            if (target.className.indexOf('red') > 0){
                var audio = new Audio('music/scream.mp3');
                audio.play();
                endGame("You lose");
            }

        }

        return false;
    }

    function Remove(id) {
        var gem = game.querySelector("#" + id);

        if(typeof(gem) != 'undefined')
            gem.parentNode.removeChild(gem);
    }

    function Spawn() {
        var index = Math.floor( ( Math.random() * 3 ) );
        var gem = gems[index];

        var id = Math.floor( ( Math.random() * 1000 ) + 1 );
        var ttl = Math.floor( ( Math.random() * parseInt(gem.MaxTTL) * 1000 ) + 1000 ); //between 1s and MaxTTL
        var x = Math.floor( ( Math.random() * ( game.offsetWidth - 40 ) ) );
        var y = Math.floor( ( Math.random() * ( game.offsetHeight -  44 ) ) );

        var fragment = document.createElement('span');
        fragment.id = "gem-" + id;
        fragment.setAttribute('class', "gem " + gem.Class);
        fragment.setAttribute('data-value', gem.Value);

        game.appendChild(fragment);

        fragment.style.left = x + "px";
        fragment.style.top = y + "px";

        setTimeout( function(){
            Remove(fragment.id);
        }, ttl)
    }
        function Stop(interval) {
            clearInterval(interval);
        }

        function endGame( msg ) {
            count = 0;
            Stop(interval);
            Stop(counter);
            var left = document.querySelectorAll("section#game .gem");
            for (var i = 0; i < left.length; i++) {
                if(left[i] && left[i].parentNode) {
                    left[i].parentNode.removeChild(left[i]);
                }
            }
            time.innerHTML = msg || "Game Over!";
            start.style.display = "block";
            UpdateScore();
        }

        this.Start = function() {
            score.innerHTML = "0";
            start.style.display = "none";
            interval = setInterval(Spawn, 750);

            count = 4000;
            counter = null;

            function timer()
            {
                count = count-1;
                if (count <= 0)
                {
                    endGame();

                    return;
                } else {
                    time.innerHTML = count + "s left";
                }
            }

            counter = setInterval(timer, 1000);

            setTimeout( function(){
                Stop(interval);
            }, count * 1000)
        };
        addEvent(game, 'click', Click);
        addEvent(start, 'click', this.Start);
        HighScores();
    }




Aucun commentaire:

Enregistrer un commentaire