crffty

randomly generated obstacles for endless runner

Recommended Posts

I'm making an endless runner as my first dive into phaser and I've working on getting the 'obstacles' for my player to jump over. I have 3 obstacles for the player to jump over, 2 on the 'ground' and 1 hanging from the top of the game. 

My plan is to have one obstacles randomly generated every 2-6 seconds and for them to move towards the player (the player is static except for being able to jump). But I'm not sure how to go about this.

Can anyone point me in the right direction? just some sudo code or ideas how you would approach the problem?

 

My repo is https://github.com/craftycal/vaultage if anyone would like to take a look. 

Screen Shot 2016-11-28 at 7.26.36 PM.png

Share this post


Link to post
Share on other sites

 

i've tried to just create one obstacle for now. but I'm getting a whole load of errors.  

 

game.js

vaultage.game = function() {};

  this.obstacleRate = game.rnd.integerInRange(2000, 6000);
  this.obstacleTimer = 0;

vaultage.game.prototype = {
  create : function() {


    // obstacles
    this.obstacle = this.game.add.group();

  },
  update : function() {


    if (this.obstacleTimer <  this.game.time.now) {
      
      this.createObstacle();
      this.obstacleTimer = this.game.time.now + this.obstacleRate;
    }


  },
  shutdown : function() {

  }

  createObstacle: function() {
    
    var x = this.game.width;
    var y = this.game.hight(290);
    
    var obstacle = this.obstacle.getFirstExists(false);
   
    if (!obstacle) {
      obstacle = new obstacle(this.game, 0, 0);
      this.obstacle.add(obstacle);
    }

    obstacle.reset(x, y);
    obstacle.revive();

    }
  }

}
var obstacle = function(game, x, y, key, frame) {
  key = 'box';
  phaser.Sprite.call(this, game, x, y, key, frame);

  this.anchor.setTo(0.5);

  // enable physics on the sprite without gravity
  this.game.physics.arcade.enableBody(this);
  this.body.allowGravity = false;

  // if the sprite is out of the game window remove the sprite
  this.checkWorldBounds = true;
  this.onOutOfBoundsKill = true;

  this.event.onKilled.add(this.onKilled, this);
  this.events.onRevived.add(this.onRevived, this);

};

box.prototype = object.create(phaser.sprite.prototype);
box.prototype.constructor = box;

// when created
box.prototype.onRevived = function () {
  
// give the sprite some velocity
  this.body.velocity.x = -180;
};

^ obstacle.js prefab ^ 

'box' is from preload. 

Share this post


Link to post
Share on other sites

This is my sample code from my game, it will create a row of a spike/obstacle coming from you:
 

function addOneSpike(x, y, speed) {
    if(player.alive) {
    var spike = game.add.sprite(x, y, 'spikes');
    this.spikes.add(spike);
    game.physics.p2.enable(spike);
    spike.body.moveLeft(speed);
    spike.body.kinematic = true;
    spike.body.clearShapes();
    spike.body.loadPolygon('blocks_physicsData', 'spikes');
    spike.checkWorldBounds = true;
    spike.outOfBoundsKill = true;
    }
}

function addRowOfSpikes_Straight() {
    var hole = Math.floor(Math.random() * 5) + 1;

    for (var i = 0; i < 8; i++) {
        if (i != hole && i != hole + 1) {
       //x, y, speed
          this.addOneSpike(1140, 470, 300);
       }
    }
}

And call the function every 2 seconds:

//create function...
game.time.events.loop(2000, addRowOfSpikes_Straight);

I don't know if you want this, but try it.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.