1

我在尝试使用 AStar + Phaser 时遇到了一些麻烦。我调试了一下,发现了一个小错误。astarNode 属性的 X 和 Y 是错误的。我仍在尝试修复它,但你们可能会帮助我更快地找到问题。

代码

preload: function() {

    this.game.load.tilemap('map', 'assets/tilemap.json', null, Phaser.Tilemap.TILED_JSON);
    this.game.load.image('RPGPackSheet', 'assets/sprites/RPGPackSheet.png');
},

create: function() {

    this.map = this.game.add.tilemap('map');
    this.map.addTilesetImage('RPGPackSheet');

    this.layer = this.map.createLayer('LayerName');

    this.astar = this.game.plugins.add(Phaser.Plugin.AStar);
    this.astar.setAStarMap(this.map, 'LayerName', 'RPGPackSheet');

    console.log(this.map.layers[0].data[4][6].properties.astarNode);
},

tilemap.json

控制台上的输出应该是:

f: 0,
g: 0,
h: 0,
walkable: false,
x: 4, // equals to the second index of layers[0].data
y: 6  // equals to the first index of layers[0].data

但是给了我:

f: 0,
g: 0,
h: 0,
walkable: false,
x: 24,
y: 13

更新:我发现了更多的东西。我的 tilemap.json 仅使用 2 个图块(42 和 52)。因此,当调用 setAStarMap() 时,他会使用 for 循环中的当前 x 和 y 更新每个 astarNode 的 X 和 Y(以便更好地了解 AStarPlugin 的 updateMap())。最后,每个使用 42 的 astarNode 都将 x 设置为 24,y 设置为 13(这是最后一个使用 42 瓦片的 astarNode 的坐标),每个使用 52 的 astarNode 将 x 设置为 13,y 设置为12(再次,使用瓦片 52 的最后一个 astarNode 的坐标)。我只是无法弄清楚为什么会这样......

4

1 回答 1

0

据我所知,你的地图瓷砖的世界大小应该是正方形的,所以我看到你的世界瓷砖大小是 25x14。因此,您可以添加空白图块来填充您的世界地图,以使其大小为 25x25

于 2014-11-11T10:55:24.710 回答