Socket.io施工中的几个房间2
目前我正在开发Construction2中的一个游戏。 它是一个HTML5JavaScript引擎。 我可能在其中实现了clay.io 但我的问题是关于“房间” Clay.io还帮助处理房间。但是我不确定我是否会接受这个提议。 例如,当我想将每个游戏的用户数限制在10个时。然后我需要运行两台服务器吗 socket.io服务器接收并返回数据。。但是每10个人玩两个游戏不会混淆服务器数据吗?当服务器A上的人A射杀某人1时,该信息是否会以某种方式最终出现在服务器B上的人B上? 或者分配的ID是否以某种方式阻止了这种情况 以下是我要根据需要升级的示例服务器:Socket.io施工中的几个房间2,socket.io,construct-2,Socket.io,Construct 2,目前我正在开发Construction2中的一个游戏。 它是一个HTML5JavaScript引擎。 我可能在其中实现了clay.io 但我的问题是关于“房间” Clay.io还帮助处理房间。但是我不确定我是否会接受这个提议。 例如,当我想将每个游戏的用户数限制在10个时。然后我需要运行两台服务器吗 socket.io服务器接收并返回数据。。但是每10个人玩两个游戏不会混淆服务器数据吗?当服务器A上的人A射杀某人1时,该信息是否会以某种方式最终出现在服务器B上的人B上? 或者分配的ID是否以某
var entities = [], count = 0;
var io = require("socket.io").listen(8099);
var INITIAL_X = 5;
var INITIAL_Y = 5;
var INITIAL_VEL_X = 0;
var INITIAL_VEL_Y = 0;
io.set('log level', 1);
io.sockets.on("connection", function (socket) {
var myNumber = count++;
//assign number
var mySelf = entities[myNumber] = [myNumber, INITIAL_X, INITIAL_Y, INITIAL_VEL_X, INITIAL_VEL_Y];
//Send the initial position and ID to connecting player
console.log(myNumber + ' sent: ' + 'I,' + mySelf[0] + ',' + mySelf[1] + ',' + mySelf[2]);
socket.send('I,' + mySelf[0] + ',' + mySelf[1] + ',' + mySelf[2]);
//Send to conencting client the current state of all the other players
for (var entity_idx = 0; entity_idx < entities.length; entity_idx++) {
//send initial update
if (entity_idx != myNumber) {
entity = entities[entity_idx];
if (typeof (entity) != "undefined" && entity != null) {
console.log(myNumber + ' sent: C for ' + entity_idx);
socket.send('C,' + entity[0] + ',' + entity[1] + ',' + entity[2]);
//send the client that just connected the position of all the other clients
}
}
}
//create new entity in all clients
socket.broadcast.emit("message",
'C,' + mySelf[0] + ',' + mySelf[1] + ',' + mySelf[2]);
socket.on("message", function (data) {
//if (myNumber == 0)
// console.log(myNumber + ' sent: ' +data);
var new_data = data.split(',');
if (new_data[0] == 'UM') {
mySelf[1] = new_data[1];
mySelf[2] = new_data[2];
mySelf[3] = new_data[3];
mySelf[4] = new_data[4];
//Update all the other clients about my update
socket.broadcast.emit("message",
'UM,' + mySelf[0] + ',' + mySelf[1] + ',' + mySelf[2] + ',' + mySelf[3] + ',' + mySelf[4]);
}
else if (new_data[0] == 'S') { // a s message
var shoot_info = [];
shoot_info[0] = new_data[1]; //ini x
shoot_info[1] = new_data[2]; //ini y
shoot_info[2] = new_data[3]; //degrees
//Update all the other clients about my update
socket.broadcast.emit("message",
'S,' + mySelf[0] + ',' + shoot_info[0] + ',' + shoot_info[1] + ',' + shoot_info[2]);
}
});
});
var实体=[],计数=0;
var io=require(“socket.io”).listen(8099);
var初始值X=5;
var初始值Y=5;
var初始水平X=0;
风险值初始水平Y=0;
io.set('日志级别',1);
io.sockets.on(“连接”,功能(套接字){
var myNumber=count++;
//分配号码
var My=实体[myNumber]=[myNumber,INITIAL_X,INITIAL_Y,INITIAL_VEL_X,INITIAL_VEL_Y];
//将初始位置和ID发送给连接玩家
log(myNumber+'sent:“+”我“+”我自己[0]+”、“+我自己[1]+”、“+我自己[2]);
send('I',+我自己[0]+','+我自己[1]+','+我自己[2]);
//向conencting客户端发送所有其他玩家的当前状态
对于(var entity_idx=0;entity_idx
Socket.io具有可以限制广播的房间,请参见:
然后不要使用socket.broadcast.emit
而是使用io.sockets.in('roomname').emit
将其与Clay.io进行网格化的一个好方法是将房间名称设置为room.id(在Construct 2插件中是RoomId表达式)。当Clay.io房间填满时(在C2中有一个条件),使用该唯一ID创建Socket.io房间,并将刚刚调用“房间填满”的玩家放入该房间
我知道这有点不同,因为这是一个用CoffeeScript编写的游戏,而不是构造2,但我们在Slime截击游戏中使用了Clay.io rooms+Socket.io rooms