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

时间:2016-10-25 21:18:37

标签: javascript node.js html5 socket.io phaser-framework

helm状态下,当您设置扭曲因子并按下参与按钮时,它会调用engage来发出必要的数据。服务器接收到此信息,确定惯性阻尼器是否处于活动状态,然后发出'warpFailed'或更新扭曲因子。在app.js中,收到服务器发出并更新globalGame.warpFailed。在captain州,globalGame.warpFailed已经过检查。

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

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

server.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 state(这是在此状态下引用它的唯一位置,它会正确地将更改值记录到控制台):

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或与{{1}}有关的唯一区域。

1 个答案:

答案 0 :(得分:1)

这就是问题所在:

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

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

相关问题