Sign in to follow this  
stnight99

Weird Physics Problem When Jumping From A High Place

Recommended Posts

Hello Guys,

 

I have encountered a weird problem on a sprite character jumping off from a high place and whenever it falls - it should hit the ground layer, but it doesn't, it just go through it even the ground layer is declared as a solid surface, I recorded it - just check this link: https://drive.google.com/open?id=0B7e3g0f7wFCPTU9feXRObnlBREk

 

and below is my code:

var playState;playState = {  create: function() {    this.leftButton = game.input.keyboard.addKey(Phaser.Keyboard.LEFT);    this.rightButton = game.input.keyboard.addKey(Phaser.Keyboard.RIGHT);    this.upButton = game.input.keyboard.addKey(Phaser.Keyboard.UP);    game.input.keyboard.addKeyCapture([Phaser.Keyboard.LEFT, Phaser.Keyboard.RIGHT, Phaser.Keyboard.UP]);    game.physics.startSystem(Phaser.Physics.ARCADE);    this.bg = game.add.tileSprite(0, 0, 1024, 1025, 'bg_talltrees');    this.bg.fixedToCamera = true;    this.map = game.add.tilemap('level0');    this.map.addTilesetImage('sheet', 'sheet');    this.map.addTilesetImage('sheet_grass', 'sheet_grass');    this.map.addTilesetImage('other_objects', 'other_objects');    this.ground = this.map.createLayer('ground');    this.building = this.map.createLayer('building');    this.building_door_windows = this.map.createLayer('building_door_windows');    game.physics.arcade.enable(this.ground);    this.map.setCollisionBetween(1, 1000, true, 'ground');    this.ground.resizeWorld();    this.startpoint = game.add.group();    this.map.createFromObjects('startpoint', 148, 'signRight', 0, true, false, this.startpoint);    this.sPoint = this.startpoint.getFirstAlive().position;    this.player = game.add.sprite(this.sPoint.x, this.sPoint.y, 'player');    game.physics.arcade.enable(this.player);    this.player.anchor.setTo(0.5, 0.5);    this.player.body.gravity.y = 2000;    this.player.animations.add('walk', [0, 1, 2, 3, 4, 5, 6, 7], 10, true);    game.camera.follow(this.player);  },  update: function() {    this.player.body.velocity.x = 0;    game.physics.arcade.collide(this.ground, this.player);    if (this.upButton.justDown && this.player.body.onFloor()) {      this.player.body.velocity.y = -800;      this.player.animations.play('jump');    }    if (this.leftButton.isDown) {      this.player.scale.x = -1;      this.player.body.velocity.x = -150;      this.player.animations.play('walk');    } else if (this.rightButton.isDown) {      this.player.scale.x = 1;      this.player.body.velocity.x = 150;      this.player.animations.play('walk');    } else {      this.player.animations.stop('walk', true);    }  },  render: function() {}};

Share this post


Link to post
Share on other sites

I'm just guessing here... but I bet you're experiencing tunneling. That means that the velocity of the object is some factor greater than the size of the thing you're trying to collide with. In this instance, if the tile is 16px high and the velocity is higher than 960 px/sec there's a good chance the physics engine will miss the collision.

 

To combat that in Phaser, you can either change the physics variables you're using (gravity, max velocity, etc) or you can set the sprite.body.tilePadding property to make up the difference.

Share this post


Link to post
Share on other sites

Also, there's a magic property to use which very often solves the problem (and could enable you to go back to 800 velocity) : 

this.game.physics.arcade.TILE_BIAS = 40;

Tweak it to use a value which works for you.

 

I don't even know what that does, but it sure has solved this very issue for me a couple of times already...

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...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.