我已经制作了这个系统,因此用户可以登录我的网站并玩一个需要间隔时间的游戏。当用户完成播放我基本上想要杀死间隔。虽然一切似乎都运行良好,但是杀死间隔有一些问题。
以下是问题每当用户完成播放时,间隔就会被杀死,不仅是因为用户正在播放,还有所有人。这可能是因为我正在为一个区间分配一个变量,当一个用户完成游戏时我正在杀死interval
,我是对的,那么它会杀掉其他区间吗?
以下是我为此问题编写的一些代码,
var user; //this is a variable that has all info about the user. (its not usually empty)
var usersPlaying = [];
socket.on('game', function(game) {
if(game.type == "start"){
usersPlaying.push({
user_id: user.id
});
var game = setInterval(function(){
if(findUser(user.id) !== undefined){
console.log('Second passed!');
}else{
clearInterval(game); //stop the interval
}
}, 1000);
}else if(game.type == "stop"){
console.log("User has decided to quit playing the game!");
usersPlaying.splice(usersPlaying.findIndex(user => user === user.id), 1); //remove user from playing
}
});
由于我重写并简化了代码,因此可能会出现一些错误,否则很难帮助我。
无论如何,我怎么能这样做才能清除某个特定人的间隔?
谢谢!
答案 0 :(得分:0)
setInterval
调用返回唯一ID。您可以使用该ID清除该间隔计时器:
var uniqueId = setInterval(function () { /* ... */ }, 1000);
稍后......
clearInterval(uniqueId);
会杀死那个特定的计时器。
我建议在usersPlaying
数组中为每个用户存储uniqueId。
答案 1 :(得分:0)
将特定套接字的间隔存储在其自己的范围内:
var user; //this is a variable that has all info about the user. (its not usually empty)
var usersPlaying = [];
socket.on('game', function(game) {
if(game.type == "start"){
usersPlaying.push({
user_id: user.id
});
socket.game = setInterval(function(){
if(findUser(user.id) !== undefined){
console.log('Second passed!');
}else{
clearInterval(socket.game); //stop the interval
}
}, 1000);
}else if(game.type == "stop"){
console.log("User has decided to quit playing the game!");
usersPlaying.splice(usersPlaying.findIndex(user => user === user.id), 1); //remove user from playing
}
});
所以你也可以在断开连接时杀掉它:
socket.on('disconnecting',function(){
if(socket.game){clearInterval(socket.game);}
});
编辑:
var user; //this is a variable that has all info about the user. (its not usually empty)
更好地存储套接字范围内的所有内容(服务器中的每个客户端套接字对象都有自己的" user"密钥,而不是使用丑陋的全局变量
因此将其存储为socket.user = {id:"foo"}
,您可以访问该客户端执行套接字事件请求的特定用户对象,如if(findUser(socketuser.id) !== undefined){