我有一个tic-tac-toe游戏,可以将动作发送到所有连接,我还有一个重置按钮,可以在游戏结束/赢得时重置游戏。
这些动作很好,他们被看到了。但是,当按下重置按钮时,只能通过按下按钮的连接看到它,因此该功能正确触发但不向所有按钮发射。
这是我的服务器端代码:
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看作所有连接的发射函数。任何帮助都将非常感激。
答案 0 :(得分:0)
好的,我明白了。对于那些可能遇到同样问题的人来说,这就是答案。 我没有必要在服务器端更改任何内容。在客户端,我更改了以下内容:
$('#replayButton').click(function() {
socket.emit('reset', "");
});
socket.on('reset', function() {
resetGame();
});
基本上只需要发出被点击的按钮然后使用socket.on来激活该功能。