Jump to content

is this the correct way to add body to multible sprites


Recommended Posts

Hi everyone,

quick question,

I googled that you can't add velecity to a group so I wrote this script and it works fine, but am I pulling to many resourses on the cpu if I create mulitble enemies at once on the screen, at present I have 2 enemies but will add more

in laymans terms I have an external json file for the enemy x,y, key, velocity etc.., I then push each enemy into an empty array, and use a for loop in the update function to check collision against a wall and reverse the velocity

here's the 2 parts I wrote

in the create function :

  //create an empty array
    this.en = [];
    for (var i = 0; i <this.levelData.enemyData.length; i ++){
      // add sprite to stage
      this.enemy = this.add.sprite(this.levelData.enemyData.x, this.levelData.enemyData.y, this.levelData.enemyData.key);
      //enable physics
      //give it a speeed for x
      this.enemy.body.velocity.x = this.levelData.enemyData.vel;
      //push enemy into the array

in the update function

  // enemy stuff
    for (var i=0; i < this.en.length; i++){
        //hits wall
        this.game.physics.arcade.collide(this.en,  this.collisionLayer, function(){

          var hitRight = this.en.body.blocked.right;
          var hitLeft = this.en.body.blocked.left;

           if (hitRight){
             this.en.body.velocity.x = - this.levelData.enemyData.vel;
           if (hitLeft){
             this.en.body.velocity.x = this.levelData.enemyData.vel;
             this.en.scale.setTo(0.5, 0.5);

        }, null, this);
        // player hits enenmy
        this.game.physics.arcade.overlap(this.player, this.en, this.hitEnemy);

am I right or is there a better way to do it ?

also on a seconadry note I originally used this in the update function

this.game.physics.arcade.collide(this.en,  this.collisionLayer, this.reverseEn, null, this);

reverseEn : function(enemy, layer){
   var hitRight = enemy.body.blocked.right;
   var hitLeft = enemy.body.blocked.left;
   var speed = enemy.body.velocity.x;

    if (hitRight){
      enemy.body.velocity.x = -30;
//      console.log('hit right wall at ' + speed);

    if (hitLeft){
      enemy.body.velocity.x = 30;
      enemy.scale.setTo(0.5, 0.5);
  //    console.log('hit left wall at ' + speed);

but speed is set at 0 and not at the this.en.bodyvelocity.x eg 30 - why is that ?

hope it makes sense - thanks in advance


Link to comment
Share on other sites


  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...