javascript - 全局变量不在所有 Phaser 状态下更新

标签 javascript node.js html socket.io phaser-framework

helm 状态下,当您设置扭曲系数并按下engage按钮时,它会调用engage来发出必要的数据。服务器收到此消息,确定惯性阻尼器是否处于事件状态,然后发出 'warpFailed' 或更新扭曲系数。在 app.js 中,接收服务器发出的信号并更新 globalGame.warpFailed。在captain状态下,globalGame.warpFailed被选中。

问题在于,在 helm 状态下,globalGame.warpFailed 已正确记录到控制台并反射(reflect)了正确的状态。在 captain 状态下,无论实际值是什么,它都会不断记录 false

老实说,我什至不确定要显示什么代码,但这是我能想到的一切:

服务器.js:

socket.on('warp', function (data) {
    if (serverGameData.helm.inertDampeners) {
        socket.emit('warpFailed');
    } else {
        serverGameData.helm.warpFactor = data.helm.warpFactor;
    }
});

app.js

var socket = io(),
    globalGame = {
        sfx: {
            effects: null,
            intro: null,
            menuBoot: null,
            impulse: null,
            warp: null
        },
        warpFailed: false
    }

/* LOTS OF IRRELEVANT CODE HERE - NONE OF WHICH TOUCHES THE ABOVE DECALRED */

socket.on('warpFailed', function () {
    globalGame.warpFailed = true;
});

helm 状态(这是在此状态下引用它的唯一位置,并且将更改的值正确记录到控制台):

update() {
    console.log(globalGame.warpFailed);
}

engage() {
// Called by a button press in this state
    globalGame.sfx.effects.play("launch_02", 1);
    socket.emit('warp', {
        helm: {
            warpFactor: this.warpNum
        }
    });
}

队长状态(这也是在此状态下唯一引用它的地方。它不断地将 false 记录到控制台。):

update() {
    console.log(globalGame.warpFailed);
}

我在这里犯了一些逻辑错误或者我遗漏了一些明显的东西吗?我已经检查并重新检查过,这些是唯一访问或与 globalGame.warpFailed 有关的区域。

最佳答案

这就是问题所在:

socket.on('warp', function (data) {
    if (serverGameData.helm.inertDampeners) {
        socket.emit('warpFailed'); // <---- RIGHT HERE
    } else {
        serverGameData.helm.warpFactor = data.helm.warpFactor;
    }
});

warp 发射来自 helm 状态,这是一个独特的套接字。因此,响应仅发送到该特定套接字。我将 socket.emit('warpFailed') 更改为 io.emit('warpFailed'),并且它已按预期成功发送到所有套接字。

关于javascript - 全局变量不在所有 Phaser 状态下更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40249878/

相关文章:

javascript - 如何即时获取上月 15 日和当月 16 日

javascript - React twilio.Js 库接受来电

node.js - 如何正确地将更改推送到 Heroku

json - 如何使用附加大括号访问 JSON

javascript - 如何在 AngularJS 中允许事件传播?

javascript - 如何使用 jQuery 在页面上的每个图像上放置一个 div?

javascript - jQuery 动态向表添加列不起作用

javascript - 检测页面上的自动点击

javascript - 如何正确使用客户端和服务器端的 javascript 文件 - Node.js

javascript - 展平嵌套的 HTML DOM 节点