1

私はマルチプレイヤーで小さなゲームを構築しています.私の問題は、弾丸を送るときに約80の量を超えると遅延があることです.

私はUDPタイプ、サーバーへの接続コードを使用しています:

udp = socket.udp()
udp:settimeout(0)
udp:setpeername(address, port)

サーバーへの弾丸の私の udp:send:

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 座標の更新は、クライアントがブレット x、y を取得したときに発生し、最初の位置からの距離が 300 ピクセルを超えたときにブレットを削除します。

しかし、私の問題は、撮影中にラグがあることです..

4

1 に答える 1