Javascript 如何通过网络高效地每秒数十次同步游戏状态?
这是我正在做的。我用它来制作一个3D克隆,连接玩家并转移游戏状态。以下是我现在的基本想法:Javascript 如何通过网络高效地每秒数十次同步游戏状态?,javascript,three.js,Javascript,Three.js,这是我正在做的。我用它来制作一个3D克隆,连接玩家并转移游戏状态。以下是我现在的基本想法: conn = peer.connect(partner); conn.on('open', function() { startGame(); conn.send(game.getState()); }); conn.on('data', function handlePeerData(data) { game.updatePartnerState(data); con
conn = peer.connect(partner);
conn.on('open', function() {
startGame();
conn.send(game.getState());
});
conn.on('data', function handlePeerData(data) {
game.updatePartnerState(data);
conn.send(game.getState());
});
这告诉每个客户机以最快的速度将游戏状态来回传递给彼此,每个客户机处理一个负载并发送回另一个负载。以下是getState
和updatePartnerState
函数:
game: {
getState: function() {
var p = spaceship.mesh.position,
v = spaceship.velocity,
r = spaceship.mesh.rotation;
return {
position: {x: p.x, y: p.y, z: p.z},
velocity: {x: v.x, y: v.y, z: v.z},
rotation: {x: r.x, y: r.y, z: r.z}
}
},
updatePartnerState: function(state) {
with (state) {
partner.mesh.position.set(position.x, position.y, position.z);
partner.mesh.rotation.set(rotation.x, rotation.y, rotation.z);
partner.velocity.set(velocity.x, velocity.y, velocity.z);
}
}
}
这可能不会让你们中的一些人感到惊讶,但这会导致每5秒左右的动画和动画打嗝——我想这是垃圾收集器必须启动的
实际问题
我能做些什么来有效地转移游戏状态?JSON(反)序列化在这里相对昂贵吗?如果是这样的话,我可以用什么聪明、便宜的方式来传输这些号码?如果我尽可能避免使用对象,这会不会减少垃圾收集器的压力?如果你真的认为原因是GC,你应该仔细看看你的客户端代码。也许这有帮助: