我有一个井字棋游戏,可以将 Action 发送到所有连接,并且我还有一个重置按钮,可以在游戏结束/获胜时重置游戏。
这些 Action 效果很好,它们被看到了。但是,当按下重置按钮时,只有按下该按钮的连接才能看到它,因此该功能可以正确触发,但不会向所有人发出。
这是我的服务器端代码:
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());
});
我想我可能必须引用 socket.io 视为向所有连接发出的函数。任何帮助将不胜感激。
好吧,我明白了。这是为那些可能遇到同样问题的人提供的答案。我无需在服务器端进行任何更改。在客户端我更改了以下内容:
$('#replayButton').click(function() {
socket.emit('reset', "");
});
socket.on('reset', function() {
resetGame();
});
基本上只需要发出被单击的按钮,然后使用 socket.on 来触发该函数。
我是一名优秀的程序员,十分优秀!