setTimeout在构造函数函数方法中无法正常工作

时间:2019-07-13 03:17:29

标签: javascript

我正在尝试创建一个业余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,从而停止循环。

2 个答案:

答案 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