diff --git a/examples/wip/tilemap.js b/examples/wip/tilemap.js index 7ca46b37..75847531 100644 --- a/examples/wip/tilemap.js +++ b/examples/wip/tilemap.js @@ -8,7 +8,8 @@ function preload() { // game.load.image('phaser', 'assets/sprites/phaser-ship.png'); // game.load.image('phaser', 'assets/sprites/mushroom2.png'); // game.load.image('phaser', 'assets/sprites/wabbit.png'); - game.load.image('phaser', 'assets/sprites/arrow.png'); + // game.load.image('phaser', 'assets/sprites/arrow.png'); + game.load.image('phaser', 'assets/sprites/darkwing_crazy.png'); } diff --git a/src/physics/arcade/ArcadePhysics.js b/src/physics/arcade/ArcadePhysics.js index 1dd65f13..c80fd100 100644 --- a/src/physics/arcade/ArcadePhysics.js +++ b/src/physics/arcade/ArcadePhysics.js @@ -1018,6 +1018,8 @@ Phaser.Physics.Arcade.prototype = { var tile; var localOverlapX = 0; var localOverlapY = 0; + var maxOverlapX = Math.round(tiles[0].width / 2); + var maxOverlapY = Math.round(tiles[0].height / 2); for (var i = 0; i < tiles.length; i++) { @@ -1030,6 +1032,11 @@ Phaser.Physics.Arcade.prototype = { // LEFT localOverlapX = body.x - tile.right; + if (localOverlapX < -maxOverlapX) + { + localOverlapX = 0; + } + if (localOverlapX >= body.deltaX()) { console.log('m left overlapX', localOverlapX, body.deltaX(), this.game.time.physicsElapsed); @@ -1044,6 +1051,11 @@ Phaser.Physics.Arcade.prototype = { // RIGHT localOverlapX = body.right - tile.x; + if (localOverlapX > maxOverlapX) + { + localOverlapX = 0; + } + // Distance check if (localOverlapX <= body.deltaX()) { @@ -1059,6 +1071,12 @@ Phaser.Physics.Arcade.prototype = { // UP localOverlapY = body.y - tile.bottom; + // negatives + if (localOverlapY < -maxOverlapY) + { + localOverlapY = 0; + } + // Distance check if (localOverlapY >= body.deltaY()) { @@ -1073,6 +1091,11 @@ Phaser.Physics.Arcade.prototype = { // DOWN localOverlapY = body.bottom - tile.y; + if (localOverlapY > maxOverlapY) + { + localOverlapY = 0; + } + if (localOverlapY <= body.deltaY()) { console.log('m down overlapY', localOverlapY, body.deltaY(), this.game.time.physicsElapsed); @@ -1164,6 +1187,11 @@ Phaser.Physics.Arcade.prototype = { // LEFT body.overlapX = body.x - tile.right; + if (body.overlapX < -maxOverlapX) + { + body.overlapX = 0; + } + if (body.overlapX >= body.deltaX()) { console.log('left overlapX', body.overlapX, body.deltaX(), this.game.time.physicsElapsed); @@ -1178,6 +1206,11 @@ Phaser.Physics.Arcade.prototype = { // RIGHT body.overlapX = body.right - tile.x; + if (body.overlapX > maxOverlapX) + { + body.overlapX = 0; + } + // Distance check if (body.overlapX <= body.deltaX()) { @@ -1193,6 +1226,11 @@ Phaser.Physics.Arcade.prototype = { // UP body.overlapY = body.y - tile.bottom; + if (body.overlapY < -maxOverlapY) + { + body.overlapY = 0; + } + // Distance check if (body.overlapY >= body.deltaY()) { @@ -1207,6 +1245,11 @@ Phaser.Physics.Arcade.prototype = { // DOWN body.overlapY = body.bottom - tile.y; + if (body.overlapY > maxOverlapY) + { + body.overlapY = 0; + } + if (body.overlapY <= body.deltaY()) { console.log('down overlapY', body.overlapY, body.deltaY(), this.game.time.physicsElapsed);