问题在于,当我最初加入游戏时,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);
});
答案 0 :(得分:0)
与您的示例一致,在您的vue代码中,当您收到套接字数据时,damange的值是什么?这是所有攻击的总和吗?