Враг не следует за Игроком. Фазер3

#javascript #phaser-framework

Вопрос:

Не могли бы вы, пожалуйста, сказать мне, где я допустил ошибку в коде ? почему мой враг не следует за игроком? Я не уверен, правильно ли я определил followPlayer (). «SceneB» — это вторая сцена, может ли быть эта проблема ? Приставка.журнал ясен . Я использую EasyStar.js библиотека. Игра работает , все работает, но враг заморожен .
Спасибо

 
 class SceneB extends Phaser.Scene {
    constructor(){
      super('SceneB')
    }
   //..


create(){

finder = new EasyStar.js()
    let grid = []
    let tile 
    for(let y = 0; y < map.height; y  ) {
         let col = []
      for(let x = 0; x < map.width; x  ) {
         tile = map.getTileAt( x, y )
         col.push( tile.index)
      }
      grid.push(col)
    }

    finder.setGrid(grid)
  
    let tileset = map.tilesets[0]
    let properties = tileset.tileProperties
    let acceptableTiles = []

    for (let i = tileset.firsgid - 1;i < tiles.total;i  ) {
       if(properties[i].collides == false ) {
         acceptableTiles.push ( i 1)
       }
    }

       finder.setAcceptableTiles( acceptableTiles) 

}


update(){}

followPlayer(player,evil) {
      

      let toX = this.player.x
      let toY = this.player.y

      let fromX = this.evil.x
      let fromY = this.evil.y

      finder.findPath(fromX, fromY, toX, toY, function(path) {
         console.log(path)
         this.moveCharacter(path)
       })

       finder.calculate()
    }


      moveCharacter(path){
        let mytimeline = this.scene.tweens.createTimeLine()    

        for(let i = 0;i < path.length - 1;i  ) {
          let ex = path[i   1].x
          let ey = path[e   1].y

            mytimeline.add({
             targets: this.player,
            x:{value: ex * map.tileWidth, duration: 200},
            y:{value: ey * map.tileHeight, duration: 200}
          })
        }
        mytimeline.play()
      }

 

Ответ №1:

followPlayer никогда не вызывается, поэтому логика на самом деле никогда не сработает.

Вы захотите назвать это где-нибудь в своем коде, в зависимости от того, как вы реализовали свою player логику.

Вы также можете захотеть проверить finder.findPath это path !== null и что-то сделать , если это так, так как это также может вызвать проблему.

 finder.findPath(fromX, fromY, toX, toY, function(path) {
 console.log(path);
 if (path !== null) {
     this.moveCharacter(path);
 }
});