全局变量未在所有 Phaser 状态中更新
Global Variable Not updating in all Phaser States
在 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 状态(这是在此状态下唯一引用它的地方,它会将更改值正确记录到控制台):
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')
,它已按预期成功发送到所有套接字。
在 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 状态(这是在此状态下唯一引用它的地方,它会将更改值正确记录到控制台):
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')
,它已按预期成功发送到所有套接字。