套接字发射不适用于setInterval

时间:2019-03-28 16:27:11

标签: javascript socket.io

问题在于,当我最初加入游戏时,ingame设置为false,用户可以通过单击按钮实时加入游戏,并且用户ingame变为true。即使用户不在游戏中,怪物也会每五秒攻击一次,但是如果用户不在游戏中,他的HP不会受到怪物伤害的影响。假设当时玩家ingame设置为false时,怪物攻击了十次。之后,我单击按钮加入游戏,然后所有十次攻击都立即发送给用户。什么会导致此问题?

setInterval(() => {
    let monsterDamage = Math.floor(Math.random() * monsters[defeats.defeats].damageB) + monsters[defeats.defeats].damageA;

    User.findOne({username: username, ingame: true}).then((user) => {
            user.hp -= monsterDamage;
            user.save();
    });

    io.emit('monster-attack', {
        damage: monsterDamage
    });
    console.log(monsterDamage);
}, 5000);

VueJS:

        socket.on('monster-attack', (data) => {
            if(this.ingame) {
            this.userHP = this.userHP - data.damage;
            this.userBar = (this.userHP / this.userMaxHP) * 100;
                if(this.userHP < 0) {
                    this.userHP = 0;
                }
            }
            this.monsterDamage = data.damage;
            this.monsterDamageVisible = true;
            setTimeout(() => {
                this.monsterDamageVisible = false;
            }, 1000);
        });

1 个答案:

答案 0 :(得分:0)

与您的示例一致,在您的vue代码中,当您收到套接字数据时,damange的值是什么?这是所有攻击的总和吗?