0

我制作了一个小脚本,可以让布娃娃向上飞。它可以工作,但会留下一条错误消息,我不知道为什么。

[ERROR] RunString:11: Tried to use a NULL physics object!  
  1. ApplyForceCenter - [C]:-1  
   2. fn - RunString:11  
    3. unknown - addons/ulib/lua/ulib/shared/hook.lua:179

在我删除所有现有的布娃娃之前,该错误会在控制台中发送垃圾邮件

我的代码:

hook.Add("Think", "Fly", function()

ent = ents:GetAll()

    for k, v in pairs(ent) do
    local isRagdoll = v:IsRagdoll()
        if isRagdoll == true then
        phys = v:GetPhysicsObject()
        phys:ApplyForceCenter(Vector(0, 0, 900))

        end
    end
end)

提前致谢。

4

2 回答 2

1

编辑:感谢 MattJearnes 澄清如何检查 gmod 对象NULL

在不了解 gmod 的 API 的情况下,我猜想它GetPhysicsObject可以返回一个表示的特殊值NULL,在这种情况下你不能调用ApplyForceCenter它。NULL你应该在做任何事情之前简单地检查IsValid

    hook.Add("Think", "Fly", function()
    ent = ents:GetAll()

    for k, v in pairs(ent) do
        local isRagdoll = v:IsRagdoll()
        if isRagdoll == true then
            local phys = v:GetPhysicsObject()
            if IsValid(phys) then
                phys:ApplyForceCenter(Vector(0, 0, 900))
            end
        end
    end
end)
于 2016-05-30T11:19:43.790 回答
1

Henrik 的回答是关于逻辑的。在尝试使用物理对象之前,您确实需要确保它是有效的。

在 GMod 中,此功能是IsValid.

if IsValid(phys) then

我会将此添加为对 Henrik 答案的评论,但我还没有足够的代表。

于 2016-05-30T14:39:37.327 回答