我用多人游戏构建了一个小游戏,我的问题是当我发送子弹时,当它超过大约 80 时会有延迟。
我使用 UDP 类型,我的连接代码到服务器:
udp = socket.udp()
udp:settimeout(0)
udp:setpeername(address, port)
我的 udp:将子弹发送到服务器:
udp:send('%S03'..startX..','..startY..','..bulletAngleX..','..bulletAngleY)
服务器:检索子弹并将它们发送回其余客户端:
elseif code == '%S03' then
local bulleta = string.gmatch(params, "[^,]+")
local sX = tonumber(bulleta())
local sY = tonumber(bulleta())
local dX = tonumber(bulleta())
local dY = tonumber(bulleta())
for i,v in ipairs(clients) do
udp:sendto('%C01'..math.random(120, 200)..','..sX..','..sY..','..dX..','..dY, v['ip'], tonumber(v['port']))
end
end
客户:获取子弹数据并在表格中创建它们:
elseif code == '%C01' then
local xy = string.gmatch(re, "[^,]+")
local dis = tonumber(xy())
local xStart = tonumber(xy())
local yStart = tonumber(xy())
local xAngle = tonumber(xy())
local yAngle = tonumber(xy())
table.insert(bullets, {distance = dis, sX = xStart, sY = yStart, x = xStart, y = yStart, dx = xAngle, dy = yAngle})
当客户端获得子弹 x、y 并在距离第一个位置超过 300 像素时移除子弹时,子弹的 x 和 y 坐标的更新发生在客户端中。
但我的问题仍然是拍摄时有滞后..