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

編集: gmod オブジェクトをチェックする方法を明確にしてくれた MattJearnes に感謝しますNULL

gmod の API について何も知らなくても、 をGetPhysicsObject表す特別な値を返すことができると思います。NULLその場合、それを呼び出すことはできませんApplyForceCenterNULLを使用して何かを行う前に、単にチェックする必要があります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 に答える