【问题标题】:How to make a smooth projectile in roblox?如何在 roblox 中制作平滑的弹丸?
【发布时间】:2020-01-04 04:23:31
【问题描述】:

我正在尝试为我的游戏制作弹丸(能量球)。我正在使用体速,但问题是它似乎滞后。我在飞行中拍摄了半秒,它似乎在半空中停了四分之一秒,然后继续。这只发生在比赛的第一分钟。 我测试了在地面上以一定的角度进行射击,这样它会走得更慢,但似乎球在距离玩家一定距离时会冻结,而不是特定时间。

实际的弹丸是一个更大、更透明的球内的一个不太透明的球,通过焊缝连接。如果我移除其中一个球,使弹丸只是一个球,我的问题就消失了。如何在保留两个球的同时解决此问题?

这是我尝试过的代码:

EnergyBallEvent.OnServerEvent:Connect(function(Player, MouseClickLocation)
    local Character = Player.Character
    local Humanoid = Character:FindFirstChildWhichIsA("Humanoid")
    if Humanoid.Health > 0 and not DisabledItems[Player.UserId..'EnergyBall'] then
        DisabledItems[Player.UserId..'EnergyBall'] = true
        Humanoid:LoadAnimation(script.EnergyBallAnimation):Play()
        local Ball = Instance.new("Part", SpellsFolder)
        local CasterValue = Instance.new("ObjectValue", Ball)
        CasterValue.Name = "Caster"
        CasterValue.Value = Player.Character
        Ball:SetNetworkOwner(nil) --removing or modifying this
        Ball.Transparency = 1
        Ball.Shape = Enum.PartType.Ball
        Ball.BrickColor = BrickColor.new(0, 255, 255)
        Ball.Material = Enum.Material.Neon
        Ball.Size = Vector3.new(2.2, 2.2, 2.2)
        Ball.Massless = true
        Ball.CanCollide = false
        local Weld = Instance.new("Weld", Ball)
        Weld.Part0 = Ball
        Ball = Instance.new("Part", Ball)
        Ball:SetNetworkOwner(nil) --or this have no effect that is visible
        Ball.Transparency = 1
        Ball.Shape = Enum.PartType.Ball
        Ball.BrickColor = BrickColor.new(0, 255, 255)
        Ball.Material = Enum.Material.Neon
        Ball.Size = Vector3.new(1.6, 1.6, 1.6)
        Ball.Massless = true
        Weld.Part1 = Ball
        Weld = Instance.new("Weld", Ball)
        Weld.Part0 = Ball
        if Character:FindFirstChild("LeftHand") then
            Weld.Part1 = Character.LeftHand
        else

        end
        for i = 0, 40, 1 do
            Ball.Transparency = Ball.Transparency - 0.012
            Ball.Parent.Transparency = Ball.Parent.Transparency - 0.006
            wait(0.02)
        end
        Weld:Destroy()
        local Motion = Instance.new("BodyVelocity", Ball)
        Motion.Velocity = ((MouseClickLocation - Player.Character.HumanoidRootPart.Position).Unit*100)
        DisabledItems[Player.UserId..'EnergyBall'] = nil
    end
end)

这是我尝试的更多代码:

EnergyBallEvent.OnServerEvent:Connect(function(Player, MouseClickLocation)
    local Character = Player.Character
    local Humanoid = Character:FindFirstChildWhichIsA("Humanoid")
    if Humanoid.Health > 0 and not DisabledItems[Player.UserId..'EnergyBall'] then
        DisabledItems[Player.UserId..'EnergyBall'] = true
        Humanoid:LoadAnimation(script.EnergyBallAnimation):Play()
        local Model = Instance.new("Model", SpellsFolder)
        local Ball = Instance.new("Part", Model)
        local CasterValue = Instance.new("ObjectValue", Model)
        CasterValue.Name = "Caster"
        CasterValue.Value = Player.Character
        Ball.Transparency = 1
        Ball.Shape = Enum.PartType.Ball
        Ball.BrickColor = BrickColor.new(0, 255, 255)
        Ball.Material = Enum.Material.Neon
        Ball.Size = Vector3.new(2.2, 2.2, 2.2)
        Ball.Massless = true
        Ball.CanCollide = false
        local Weld = Instance.new("Weld", Ball)
        Weld.Part0 = Ball
        local Ball2 = Instance.new("Part", Model)
        Model.PrimaryPart = Ball2
        Ball2:SetNetworkOwner(nil)
        Ball2.Transparency = 1
        Ball2.Shape = Enum.PartType.Ball
        Ball2.BrickColor = BrickColor.new(0, 255, 255)
        Ball2.Material = Enum.Material.Neon
        Ball2.Size = Vector3.new(1.6, 1.6, 1.6)
        Ball2.Massless = true
        Weld.Part1 = Ball2
        Weld = Instance.new("Weld", Ball2)
        Weld.Part0 = Ball2
        if Character:FindFirstChild("LeftHand") then
            Weld.Part1 = Character.LeftHand
        else

        end
        for i = 0, 40, 1 do
            Ball2.Transparency = Ball2.Transparency - 0.012
            Ball.Transparency = Ball.Transparency - 0.006
            wait(0.02)
        end
        Weld:Destroy()
        local Motion = Instance.new("BodyVelocity", Ball)
        Motion.Velocity = ((MouseClickLocation - Player.Character.HumanoidRootPart.Position).Unit*100)
        DisabledItems[Player.UserId..'EnergyBall'] = nil
    end
end)

我讨厌这种行为,我需要解决它

另一个观察结果是,如果我注释掉第二个球的创建和东西,所以它只是一个球,错误就消失了

【问题讨论】:

  • 你在使用工会吗?工会非常滞后,不推荐。
  • 我在弹丸方面也遇到了一些问题,最后设置网络所有权并没有真正帮助。我切换到 FastCast 模块,考虑切换,它确实不需要很多更改...devforum.roblox.com/t/…

标签: lua lag roblox


【解决方案1】:

您想在OnClientEvent:Connect() 块中将推进代码添加到客户端脚本,并使服务器脚本改为具有Ball:SetNetworkOwner(Player)EnergyBallEvent:FireClient(Ball)。我是 OP,但我现在最好回答这个问题,因为我很久以前就知道了。

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 2014-07-14
    • 2011-05-14
    • 1970-01-01
    • 2023-04-02
    • 2011-08-18
    • 1970-01-01
    • 2021-04-16
    • 2022-11-23
    相关资源
    最近更新 更多