Jump to content

Unexpected behavior with Group


Recommended Posts

I'm having some unexpected behavior using groups in my Phaser game.  I'm using a Tilemap to build my world, and a Texture Atlas for my characters and objects.


First I render my tilemap and then I add a group to the game, and add a couple of sprites to the group.  This is where things go awry.


The door sprite I add has no physics enabled, so it seems to get added on top of the game and just kid of floats there.


The player sprite I add has physics enabled and is tracked by the camera, but it appears to be quite offset.  It seems like the group isn't being created in the world and it's probably something glaringly simple I am overlooking, but I just can't figure this out.  


If I add the sprites to the game directly, vs using the group, they work fine.


Here's what my state code looks like:


  preload: function () {
    this.load.atlas('characters', 'assets/characters.png', 'assets/characters.json');
    this.load.tilemap('lvl_1-1','assets/lvl_1-1.json', null, Phaser.Tilemap.TILED_JSON);

    this.physics.arcade.gravity.y = 800;

    this.physics.arcade.TILE_BIAS = 40;
  create: function () {

    this.map = this.game.add.tilemap('lvl_1-1');
    this.map.addTilesetImage('tiles', 'sheet1');

    this.ground_layer = this.map.createLayer('Ground');


    this.player = new Phaser.Sprite(this.game, 64, 408, 'characters', 1);

    door = new Phaser.Sprite(this.game, 64, 160, 'characters', 0);

    /** ================ Method 1: this doesn't work as expected =================== **/
    characters_group = this.game.add.group(this.game, 'characters_group', true);
    characters_group.add(door); // door is added like an overlay, does not move with camera
    characters_group.add(this.player); // player moves as expected, but falls off-camera
    /** ============================================================================ **/

    /** =================== Method 2: this works just fine ========================= /
    /** ============================================================================ **/

    this.game.camera.follow(this.player, Phaser.Camera.FOLLOW_PLATFORMER);

    this.cursors = this.game.input.keyboard.createCursorKeys();

  update: function () {

    this.physics.arcade.collide(this.player, this.ground_layer);

    if (this.cursors.left.isDown) {
      this.player.body.velocity.x = -200;
    } else if (this.cursors.right.isDown) {
      this.player.body.velocity.x = 200;
    } else {
      this.player.body.velocity.x = 0;

    if (this.player.body.blocked.down && this.cursors.up.isDown) {
      this.player.body.velocity.y = -900;




I attached some screenshots showing what's happening.  Any help would save me a lot of Tylenol!


Link to comment
Share on other sites


  • Recently Browsing   0 members

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