我在尝试使用 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);
},
控制台上的输出应该是:
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 的坐标)。我只是无法弄清楚为什么会这样......