敌人不跟随玩家。 Phaser3
Enemy don not follow Player. Phaser3
你能告诉我代码哪里出错了吗?为什么我的敌人不跟随玩家?
我不确定我是否定义了正确的 followPlayer() 。
'SceneB'是第二个场景,会不会是这个问题? Console.log 很清楚。我正在使用 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()
}
followPlayer
永远不会被调用,因此逻辑永远不会真正触发。
根据您实现 player
逻辑的方式,您需要在代码中的某处调用它。
您可能还想在 finder.findPath
内部检查 path !== null
,如果是,则采取措施,因为这也可能导致问题。
finder.findPath(fromX, fromY, toX, toY, function(path) {
console.log(path);
if (path !== null) {
this.moveCharacter(path);
}
});
你能告诉我代码哪里出错了吗?为什么我的敌人不跟随玩家?
我不确定我是否定义了正确的 followPlayer() 。
'SceneB'是第二个场景,会不会是这个问题? Console.log 很清楚。我正在使用 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()
}
followPlayer
永远不会被调用,因此逻辑永远不会真正触发。
根据您实现 player
逻辑的方式,您需要在代码中的某处调用它。
您可能还想在 finder.findPath
内部检查 path !== null
,如果是,则采取措施,因为这也可能导致问题。
finder.findPath(fromX, fromY, toX, toY, function(path) {
console.log(path);
if (path !== null) {
this.moveCharacter(path);
}
});