【发布时间】:2017-12-05 07:35:33
【问题描述】:
我正在尝试使用 Node.JS 和 Socket.IO 制作服务器。我想做一个只有简单运动事件的在线游戏。我写了一些代码,但效果不是很好。我有大量的延迟。您可以查看下面的视频。顺便说一句,我在我的 DigitalOcean 服务器甚至我的 LocalHost 上对其进行了测试。我的问题有什么诀窍?我真的很想学习网络编程,但我总是卡住。
Latency GAMEPLAY YouTube Link -- Especially check 13th seconds
我将在下面解释我的所有作品。但是,如果您想查看详细信息代码。您可以访问 GitHub 项目链接。
在客户端,我使用了 Unity3D。如果用户键按下任何箭头键,例如 upArrow、rightArrow,我会将这些信息发送到服务器。通过这样做,服务器知道我想去哪个方向。
if (Input.GetKey(KeyCode.UpArrow))
{
Movement = Vector3.up;
JSONObject data = new JSONObject();
data.AddField("x", Movement.x);
data.AddField("y", Movement.y);
socket.Emit("move", data);
}
// if Input.GetKey(KeyCode.RightArrow)
// if Input.GetKey(KeyCode.RightArrow) .. etc
在服务器端,我只使用了 Node JS 和 Socket.IO。我创建了一个间隔函数,它只将所有玩家发送给客户端。此间隔函数每 1 秒触发 60 次。您可以在下面看到代码。
setInterval(function() {
io.emit('state', players);
}, 1000 / 60);
顺便说一句,当服务器接收到任何移动事件时,它会这样做:
socket.on('move', function(data) {
var player =players[socket.id] ||{};
player.x =player.x+(data.x*0.1);
player.y =player.y+(data.y*0.1);
});
【问题讨论】:
标签: node.js sockets unity3d networking server