gpt4 book ai didi

javascript - 套接字 IO 室 : Trying to use rooms in a game app (react-native) so multiple groups of people can play the game independently of each other

转载 作者:行者123 更新时间:2023-12-02 23:45:30 26 4
gpt4 key购买 nike

我有一个应用程序,多人可以通过输入在托管游戏的手机上生成的代码来加入游戏。我想使用此代码作为套接字 io 房间的名称,以便不同组的玩家之间可以进行多个游戏。

这是我的服务器代码:

var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(3000);

io.on('connection', function (socket) {
//passing in the game_code from client side and using it as the room name
socket.on('names', function (game_code) {
socket.join(game_code);
io.to(game_code).emit('names')
});
socket.on('round_start', function (game_code) {
io.to(game_code).emit('round_start')
});
socket.on('game_start', function (game_code) {
io.to(game_code).emit('game_start')
});
socket.on('end_round', function (game_code) {
io.to(game_code).emit('end_round')
});
socket.on('next_round', function (game_code) {
io.to(game_code).emit('next_round')
});
socket.on('end_game', function (game_code) {
io.to(game_code).emit('end_game')
});
});

“名字”插槽用于玩家在游戏开始前输入名字,其余部分用于过渡到下一个屏幕;一部电话(通常是主机)按下一个按钮,使所有电话转到下一个屏幕。 “names”套接字工作正常,“round_start”套接字也正常工作,这是第一个屏幕转换。此后的下一个屏幕转换不起作用。

如果我不使用房间,所有屏幕转换都会起作用,所以我很确定我的 react native 代码不是这里的问题。我上面显示的服务器代码肯定有问题。

最佳答案

由于您没有提供完整的源代码,我只能假设可能出了什么问题。

首先,由于您使用了io.to(game_code).emit('names'),我假设您希望将“names”事件发送给房间中的所有客户端game_code,包括发送者。

(旁注:如果您希望将此事件发送给房间中除发送者之外的所有用户,您应该使用 socket.to(game_code).emit('names')。请参阅https://socket.io/docs/emit-cheatsheet/)

但是,由于 .join 方法是异步的,因此在客户端加入房间之前,可能会触发“names”事件。因此,发送者永远不会收到自己触发的“names”事件,只会收到其他客户端触发的“names”事件。

为了确保在客户端加入房间后触发“names”事件,您可以使用 .join 方法的回调:socket.join(room, callback).

io.on('connection', function (socket) {
//passing in the game_code from client side and using it as the room name
socket.on('names', function (game_code) {
socket.join(game_code, (game_code) => io.to(game_code).emit('names'););
});
//rest of your code
});

如果您不熟悉 => 箭头函数,(game_code) => io.to(game_code).emit('names') 很短对于

function (game_code){
return io.to(game_code).emit('names');
}

(别介意 return 关键字,它只是箭头函数的一部分)

关于javascript - 套接字 IO 室 : Trying to use rooms in a game app (react-native) so multiple groups of people can play the game independently of each other,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55876538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com