远程事件问题

我正在使用 ROBLOX 制作关于 Dragon Quest Heroes Rocket Slime 坦克战斗系统的游戏(虽然没有使用 100% 的 GUI)

由于我不知道如何在正常的 ROBLOX 中使弹药锁定路径,因此我决定使用一个 GUI 来显示弹药的“射击”

为此,我有一个远程事件,当弹药装载时,会在 GUI 系统的主要脚本中触发一个函数

cannon.Touched:connect(function(v)
    if fireable[v.Name] and v.Parent == workspace then
        event:FireAllClients("Left",v.Name)
        v:Destroy()
    end
end)

然后,GUI 获取正确的弹药精灵并将其从正确的坦克(FireAllClients 中的第一个参数)中射出

这是发射弹药的两个 if 语句之一(另一个 if 语句几乎完全相同,只是针对右侧的坦克)

local tank = tankFiring == "Left" and tank1 or tankFiring == "Right" and tank2
if tank == tank1 then
    print("yo!")
    script.Fire:Play()
    local ammoFrame = sp.Ammo:Clone()
    ammoFrame.Parent = tank
    ammoFrame.Visible = true
    ammoFrame.Position = UDim2.new(0,120,0,68)
    playAnimation("Cannon Fire",UDim2.new(0,120,0,68-25),tank.Frame)
    ammoFrame.Image = ammoTypes[type]["img"]
    ammoFrame.Size = ammoTypes[type]["Size"]
    repeat
        wait(.1)
        ammoFrame.Rotation = ammoTypes[type]["Rotatable"] == true and ammoFrame.Rotation + 15 or 0
        ammoFrame.Position = ammoFrame.Position + UDim2.new(0,1,0,0)
    until
    tank2:FindFirstChild("Ammo") and isTouching(ammoFrame,tank2:GetChildren()[3]) or isTouching(ammoFrame,tank2) or ammoFrame == nil

    if tank2:FindFirstChild("Ammo") and isTouching(ammoFrame,tank2:GetChildren()[3]) then
        script.Collision:Play()
        local lastAmmoPos = ammoFrame.Position
        playAnimation("Explosion",lastAmmoPos-UDim2.new(0,15,0,25),tank.Frame)
        ammoFrame:Destroy()
        tank2:GetChildren()[3]:Destroy()
    end
    if isTouching(ammoFrame,tank2) then
        script.Collision:Play()
        ammoFrame:Destroy()
        workspace["Tank2"].Health.Value = workspace["Tank2"].Health.Value - ammoTypes[type]["dmg"]
    end
end

问题在于,如果玩家在弹药开火后加入,他们将看不到 GUI 上的弹药

有没有办法解决这个问题?我不能只是再次 FireAllClients,因为那只会为所有玩家再次发射一块弹药。

点赞
用户1938640
用户1938640
有一个服务,可以跟踪哪种弹药处于哪种状态。当所有客户端加入时,每个客户端都会首先询问服务器当前弹药状态,然后订阅进一步的更改。 
2016-12-02 01:24:15