点击次数、socket.io 和 Javascript 的评分系统
Score system for number of clicks, socket.io and Javascript
>我有一个应用程序,我正在计算对象客户端的点击次数,发送到服务器
socket.emit('playerScore',score);
推送到阵列服务器端
socket.on('playerScore',function(data){
socket.score = data;
score.push(socket.score);
然后发送回客户端
io.sockets.emit ('scores',score);
但它从每个客户端接收一次分数,并为每个客户端发送一次分数。我正在尝试比较服务器端客户端发送的分数,并发回最高数字以与客户端已有的本地分数进行比较。但是我发送了不止一次,我的过滤器似乎不起作用。
var scoreData = data;
var largest = scoreData[0];
for (var i = 0; i < score.length; i++) {
if (largest < scoreData[i] ) {
largest = scoreData[i];
}
}
谢谢
我认为您应该只传递最高分(从服务器到客户端)而不是整个数组。以最高分,您的客户可以检查他是否将其存储在本地。
但也许你可以有一个更好的方法:
-
您的阵列可以具有:
{ socketId: '123123', 成绩: 12}
-
当服务器收到分数时,推送分数和套接字ID
-
从具有最高分的数组中获取对象
-
将其传递给所有客户端
有了这个,你的客户端可以按 id 而不是分数进行直接比较。
服务器:
var scores = [];
function getHighest(arr){
var highest = 0;
for (var i = 0; i < arr.length; i++) {
if (highest < arr[i] ) {
highest = arr[i];
}
}
return highest;
}
socket.on('connection', function(client) {
client.on('join', function(data) {
client.join("scores"); // Join socket IO Room
});
client.on('playerScore', function(data){
scores.push(data);
//Send to all users in scores room
socket.in("scores").emit('scores', getHighest(scores));
});
});
在客户端中:
socket.emit("join"); //Join Room
socket.emit("playerScore", score);
socket.on("scores", function(highest){
if(highest > myScore) console.log("Do something");
});
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Javascript:selenium Web驱动程序isDisplayed()不工作
- 如何通过ajax刷新JSF填充的javascript变量
- 如何在Javascript中将JSon对象转换为数组
- Javascript生成的表单未提交
- 使用javascript将动态表从一个html页面打印到另一个html页
- 通过javascript重定向html传递php变量