我正在尝试创建一个业余mmorpg JavaScript浏览器游戏,实际上是多人游戏。这是一个mmorpg,所以我将随机生成敌人(现在无关紧要),重点是我已经创建了一个构造函数,该函数创建一个单独的对象,而不链接到原型(很好)。这个单独的对象将是一些单独的npc,其数量取决于我们生成的数量。
function myEnemy(posX,posY) {
this.uuid = 'aa1b05',
this.health = 2000,
this.shield = 2000,
this.posX = posX,
this.posY = posY,
this.speed = 320,
this.damage = 80,
this.ratio = 1000,
//this.target = 'uuid',
this.aggro = true,
this.strike = function() {
this.health -= this.damage
console.log(this.health)
//if(this.aggro === true) { setTimeout(this.strike(), this.ratio); }
}
this.attack = function() {
if(this.aggro === true) { setTimeout(this.strike(), this.ratio); }
}
};
不用担心uuid
,它正在进行中。
敌人确实具有一些基本统计数据,健康状况,位置,速度等。为简单起见,我从此示例中删除了一些方法。
此代码在此处产生一个敌人:
let enemy = new myEnemy(0,0)
在此示例中,我只是在敌人每次袭击时降低其生命值,因为我还没有实施瞄准系统。它工作正常,一旦this.attack()被执行,问题就来了,因为它只会执行一次。
另一个问题是我在this.strike()
中注释该行的原因,而不是每秒重复一次操作,而是重复执行该操作的速度如此之快,以至于我的计算机崩溃了。
据我所知,无论尝试什么,setTimeout
都不起作用。
我的目标是让敌人在aggro = true时执行打击功能,我还尝试了while循环执行do没有成功,问题是setTimeout
。
更新
这不是重复项,我也曾尝试从罢工函数中删除()
,但没有成功,它先执行攻击然后返回NaN
,从而停止循环。
答案 0 :(得分:0)
blogdown::update_hugo()
应该是
setTimeout(this.strike(), this.ratio)
setTimeout(() => this.strike(), this.ratio)
函数的第一个参数本身就是一个函数。您希望稍后再调用setTimeout
,这就是推迟执行的方式。
答案 1 :(得分:0)
WITH prepped AS (
SELECT IP, Port From PortData
WHERE Protocol = 'TCP'
GROUP BY IP, Port
ORDER BY IP, Port
)
SELECT IP, GROUP_CONCAT(Port, ',')
FROM prepped
GROUP BY Ip
ORDER BY IP ASC
引用了一个函数-您实际上是在执行它。您可能需要将调用包装在新函数中(此处不需要!)或删除括号-可能还需要添加setTimeout
调用,因为在方法内部使用了bind
,但是您也可以在构造函数的顶部进行this
并在各处使用let that = this
而不是that
this