Phaser - Arcade碰撞物理学

时间:2016-12-14 21:46:40

标签: javascript phaser-framework

我正在使用Phaser框架进行简单的平铺游戏,但不幸的是我偶然发现了一个"错误"使用Arcade碰撞方法时。我希望所有的瓷砖完美地堆叠在一起,但顶部的瓷砖总是穿过它们下方的瓷砖。

这是代码:



var game = new Phaser.Game(700, 700, Phaser.AUTO, 'phaser-demo', {
  create: create,
  update: update
});

var tiles, textureRegistry = {};

function create() {
  game.physics.startSystem(Phaser.Physics.ARCADE);
  game.physics.arcade.gravity.y = 500;

  tiles = game.add.group();
  tiles.physicsBodyType = Phaser.Physics.ARCADE;
  tiles.enableBody = true;

  for (var i = 0; i < 10; i++) {
    for (var j = 0; j < 10; j++) {
      tiles.add(game.add.sprite(i * 70, j * 70, createBlock(64, 'red')));
    }
  }
  tiles.setAll('body.collideWorldBounds', true);
  tiles.setAll('body.bounce', new Phaser.Point(0.5, 0.5));

}

function update() {
  game.physics.arcade.collide(tiles);
}

function createBlock(size, color) {
  var name = size + '_' + color;
  if (textureRegistry[name]) {
    return textureRegistry[name];
  }

  var bmd = game.add.bitmapData(size, size);
  bmd.ctx.fillStyle = color;
  bmd.ctx.fillRect(0, 0, size, size);
  textureRegistry[name] = bmd;
  return bmd;
}
&#13;
<script src="https://github.com/photonstorm/phaser/releases/download/v2.6.2/phaser.min.js"></script>
&#13;
&#13;
&#13;

在Chrome上看起来似乎更糟糕。重要的是要注意,只有在使用4x4或更多的磁贴时才会出现问题。

1 个答案:

答案 0 :(得分:4)

  由于当前版本的限制,

Phaser Arcade Physics 无法很好地处理多体接触

     

或者考虑改为使用 P2 physics 和/或参见下面的讨论。