Javascript 如何将socket.io中的按钮功能发送到所有连接
我有一个tic-tac-toe游戏,它将移动发送到所有连接,我还有一个重置按钮,当游戏结束/获胜时重置游戏 这些动作很好用,可以看到。但是,当按下重置按钮时,只能通过按下按钮的连接看到,因此该功能正确启动,但不会向所有人发出 这是我的服务器端代码:Javascript 如何将socket.io中的按钮功能发送到所有连接,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我有一个tic-tac-toe游戏,它将移动发送到所有连接,我还有一个重置按钮,当游戏结束/获胜时重置游戏 这些动作很好用,可以看到。但是,当按下重置按钮时,只能通过按下按钮的连接看到,因此该功能正确启动,但不会向所有人发出 这是我的服务器端代码: var express = require('express'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.use("/", express.static('public'));
io.on('connection', function(socket){
socket.on('move', function(move){
io.emit('move', move);
});
socket.on('reset', function(reset){
io.emit('reset', reset);
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
这是我客户端代码中显示移动和按钮功能的部分
function sendPickSquare(index) {
return function() {
if (gameover || buttons[index].innerHTML !== "")
return;
socket.emit('move', {
'index' : index,
'value' : selectTurn.value
});
};
}
socket.on('move', function(move) {
buttons[move.index].innerHTML = move.value;
if (move.value === 'X') {
selectTurn.value = 'O';
} else {
selectTurn.value = 'X';
}
checkWin();
});
function resetGame() {
for (var i = 0; i < buttons.length; i++) {
buttons[i].style.backgroundColor = '';
buttons[i].innerHTML = "";
}
gameover = false;
}
for (var i = 0; i < buttons.length; i++) {
buttons[i].onclick = sendPickSquare(i);
}
$("#replayButton").click(function(reset) {
socket.emit('reset', resetGame());
});
函数sendPickSquare(索引){
返回函数(){
if(gameover | |按钮[索引].innerHTML!==“”)
返回;
socket.emit('move'{
“索引”:索引,
“值”:选择turn.value
});
};
}
socket.on('move',函数(move){
按钮[move.index].innerHTML=move.value;
如果(move.value=='X'){
选择turn.value='O';
}否则{
选择turn.value='X';
}
checkWin();
});
函数resetGame(){
对于(变量i=0;i我想我可能必须引用socket.io视为向所有连接发射的函数。任何帮助都将不胜感激。好的,我知道了。对于那些可能遇到同样问题的人,以下是答案。 我不需要在服务器端更改任何内容。在客户端,我更改了以下内容:
$('#replayButton').click(function() {
socket.emit('reset', "");
});
socket.on('reset', function() {
resetGame();
});
基本上只需要发出被单击的按钮,然后使用socket.on启动该功能。尝试使用
io.sockets.emit
而不是io.emit
谢谢您的建议,但仍然不会发送到第二个连接。是否保留了重置功能?(文档没有明确说明)您是否可以共享完整的文件,或者至少共享完整的html/服务器端。我也有同样的问题。
function sendPickSquare(index) {
return function() {
if (gameover || buttons[index].innerHTML !== "")
return;
socket.emit('move', {
'index' : index,
'value' : selectTurn.value
});
};
}
socket.on('move', function(move) {
buttons[move.index].innerHTML = move.value;
if (move.value === 'X') {
selectTurn.value = 'O';
} else {
selectTurn.value = 'X';
}
checkWin();
});
function resetGame() {
for (var i = 0; i < buttons.length; i++) {
buttons[i].style.backgroundColor = '';
buttons[i].innerHTML = "";
}
gameover = false;
}
for (var i = 0; i < buttons.length; i++) {
buttons[i].onclick = sendPickSquare(i);
}
$("#replayButton").click(function(reset) {
socket.emit('reset', resetGame());
});