2014-03-04 77 views
-1

這裏有什麼問題?這段代碼應該在我拍攝它後刪除文本,同時增加分數。另外,有人可以解釋other.name實際上是什麼意思?我不太完全理解..(是它的第一個聲明,如果有錯誤)嘗試索引字段'其他'

function wordCollision(e) 
    if (e.other.name == 'balloonText') then -- error here: attempt to index field 'other'(a nil value) 

     display.remove(e.other) 
     e.other = nil 

     score.text = score.text + 50 
     score.anchorX = 0 
     score.anchorY = 0 
     score.x = 200 
     score.y = 50 

     target.text = target.text - 1 
    else 
     if (e.other.name == 'balloonTextt') then 

      display.remove(e.other) 
      e.other = nil 

      score.text = score.text + 50 
      score.anchorX = 0 
      score.anchorY = 0 
      score.x = 200 
      score.y = 50 

      target.text = target.text - 1 
     end 
    end 
end 
+0

您能否簡單描述一下,您的功能**應該做些什麼?有一點上下文,它從哪裏獲取可能有幫助。 – Kamiccolo

+0

你是不是第一個'e.other.name'這行的錯誤?編輯,請檢查。 – Schollii

回答

1

它只是意味着在表e與關鍵'other'沒有進入。

如果,如果你想查找東西e.other你必須一表分配給關鍵:

e.other = {} 

使用元表,你可以讓它自動轉到:

mt = {} 
mt.__index=function(t,k) if ~rawget(t,k) then t[k]=setmetatable({},mt) end return t[k] end 
e={} 
e=setmetatable(e,mt) 
e.other.name='foo' 

注意這一點,因爲任何對不存在字段的查找都會爲它創建一個新表,這可能是也可能不是您想要的(除了這會覆蓋e上的任何現有metatable):

for k,v in pairs(e) do print(k,v) end 
print(e.bar) 
for k,v in pairs(e) do print(k,v) end 
0

問題可能是您在那裏有e.other = nil,但不要將e.other重置爲之後的某個值,因此當wordCollision()再次被調用時,它是e.other爲零。也可能是e.other從未初始化。驗證它是否在wordCollision()曾被調用之前被初始化,並驗證它是否被重新設置爲兩次調用wordCollision()之間的某個地方。

相關問題