Pylot
Pylot

Reputation: 261

Phaser 3: destroying all instances of a sprite

So i'm trying to make my game unload a bunch of un-used resources. It's proving to be a lot more complicated. here's my code:

 var meteor = this.physics.add.group();
 this.physics.add.collider(meteor, sput, deathControl, null, this);

 meteorSpawnFrequency = 500;
 setInterval(spawnMeteor, meteorSpawnFrequency);
 var meteorCap = 0;

 function spawnMeteor() {  

 //Create Meteors
    meteorCap++;
    meteors = meteor.create(Math.floor(Math.random() *800) + 1, 30, "meteor");
    //Edit Meteors
    meteors.depth = -1;
    meteors.setVelocityY(500);
    meteors.setScale(Math.floor(Math.random() * 2) + 1);
    meteors.setCollideWorldBounds(true);

    //Destroy meteors after the cap reaches 10
    if(meteorCap > 10){

        meteors.destroy();
        console.log("meteors destroyed");
        meteorCap = 0;

    }
}

I'm using an interval to spawn the sprites, and all of it works just fine. What I'm trying to do is set a cap that when 100 meteors are present, they'll get destroyed, and the cap gets set back to 0, to repeat this process. Only problem is it's not working. How do I get this working?

Upvotes: 0

Views: 431

Answers (1)

PhotonStorm
PhotonStorm

Reputation: 3385

Almost certainly a scope issue and there isn't enough source code shown to determine the root cause. But meteorCap looks dangerous like a local variable, so reading it from spawnMeteor isn't going to work.

Also, don't use setInterval, there is literally a TimerEvents feature built into the Phaser API for exactly this that is game-step safe and manages the scope context for you. Here is one such an example.

Upvotes: 1

Related Questions