PsychoGoldfish Posted October 24, 2014 Share Posted October 24, 2014 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.spritesheet('sheet1','assets/tiles.png',64,64,-1,1,2); this.load.tilemap('lvl_1-1','assets/lvl_1-1.json', null, Phaser.Tilemap.TILED_JSON); this.physics.startSystem(Phaser.Physics.ARCADE); 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.ground_layer.resizeWorld(); this.map.setCollisionByExclusion([],true,this.ground_layer); this.player = new Phaser.Sprite(this.game, 64, 408, 'characters', 1); this.game.physics.arcade.enableBody(this.player); 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.add.existing(door); this.game.add.existing(this.player); /** ============================================================================ **/ 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 More sharing options...
PsychoGoldfish Posted October 27, 2014 Author Share Posted October 27, 2014 Just a followup, I got this working. I replaced: characters_group = this.game.add.group(this.game, 'characters_group', true); With: characters_group = this.game.add.group(); Link to comment Share on other sites More sharing options...
Recommended Posts