什么原因导致我的 Garry's Mod Lua 脚本出现"尝试使用空的物理对象!"错误?

我写了一个小脚本,可以让布娃娃向上飞。这个脚本能够正常工作,但是会出现一个错误信息,我无法弄清楚原因。

[ERROR] RunString:11: 尝试使用空的物理对象!
  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)

提前感谢。

点赞
用户570336
用户570336

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

在不了解 gmod API 的情况下,我猜测 GetPhysicsObject 可能会返回一个表示 NULL 的特殊值,在这种情况下,你无法在其上调用 ApplyForceCenter。在执行任何操作之前,你应该先使用 IsValid 检查是否为 NULL:

    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-30 11:19:43
用户3306144
用户3306144

Henrik关于逻辑的回答完全正确。在尝试使用物理对象之前,您确实需要确保该物理对象是有效的。 在GMod中,用于此的函数是IsValid

if IsValid(phys) then

我本来想将其作为评论添加到Henrik的答案中,但我还不够有名。

2016-05-30 14:39:37