socket.io emit返回相同的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket.io emit返回相同的值相关的知识,希望对你有一定的参考价值。

这里的快速问题有人可以告诉我为什么每次我从客户attack发出enemyHealthuserHealth总是在每次发射时保持在94并且在每次攻击发射时它不会减少6?它只会在第一次点击时减少。

socket.on('attack', () => {

    var userDamage = 6;

    var enemyDamage = 6;

    var userHealth = 100;
    var enemyHealth = 100;

    var userDmg = userDamage;
    var enemyDmg = enemyDamage;

    userHealth -= enemyDmg;
    enemyHealth -= userDmg;

    console.log(enemyHealth);

});
答案

enemyHealthuserHealth在每个attack事件中保持相同的原因是这些变量在attack事件本身中被声明,每次attack事件发生时它们的值都将保持不变。

解决问题的一种方法是简单地在enemyHealth事件处理程序之外移动userHealthattack的声明和初始化,如下所示:

// Declare these variables outside of the attach handler so that their updated 
// values are retained between attack events
var userHealth = 100;
var enemyHealth = 100;

socket.on('attack', () => {

    var userDamage = 6;    
    var enemyDamage = 6;

    // Remove the variable declarations from inside the attack event
    // var userHealth = 100;
    // var enemyHealth = 100;

    var userDmg = userDamage;
    var enemyDmg = enemyDamage;

    userHealth -= enemyDmg;
    enemyHealth -= userDmg;

    // Now this value goes down each time the attach event occours
    console.log(enemyHealth);

});

以上是关于socket.io emit返回相同的值的主要内容,如果未能解决你的问题,请参考以下文章

io.emit 与 socket.emit

Socket.io Emit 不起作用

socket.io - socket.emit、socket.on、socket.send

Android socket.IO中的Emit或Ack超时处理?

io.sockets.socket(socket_id).emit() - 没有方法'socket'

GoLang Socket.io Emit 没有被 React 接收