2016-05-29 29 views
0

我製作了一個讓布娃娃向上飛的小腳本。它的工作原理,但它留下了一個錯誤消息,我不知道爲什麼。什麼原因導致「試圖使用NULL物理對象!」在我的Garry的Mod Lua腳本中出錯?

[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) 

在此先感謝。

回答

1

Henrik的回答是發現關於邏輯。在嘗試使用它之前,您確實需要確保物理對象是有效的。

在GMod中,其功能是IsValid

if IsValid(phys) then

我已經加入此爲Henrik的回答評論,但我不太有足夠的代表呢。

+0

謝謝,馬特,我相應地編輯了我的答案。順便說一句,你現在應該有足夠的代表評論無論你喜歡;) –

+0

@HenrikIlgen謝謝你! :) – MattJeanes

1

編輯:感謝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) 
相關問題