2014-03-26 67 views
0

出於某種原因,我不能刪除一組對象,即使我檢查它是否是零或不試圖調用方法「removeSelf」(一個零值)

第一件事我想:

if playGroup~=nil then 
    playGroup:removeSelf() 
end 

ERROR: Attempt to remove an object that's already been removed from the stage or whose parent/ancestor group has already been removed.

我也試過這樣:

for k,v in pairs(playGroup) do 
    if k ~= nil then 
     k:removeSelf() 
    end 
end 

ERROR: attempt to call method 'removeSelf' (a nil value)

回答

0

您不需要從組中刪除對象,Corona會在您刪除組時刪除它。所以循環(甚至在hades2510提出的修復之後)不是必需的。

您收到的錯誤「嘗試刪除已被刪除的對象...」表明playGroup是一個常規表格而不是顯示對象。在顯示對象上調用removeSelf會刪除與電暈有關的條目,並將該對象保留爲常規表格。因此,至少有這種可能性:

  • 它可能是你的代碼已經刪除playGroup作爲另一個事件處理程序的一部分,或
  • 處理程序被稱爲第二次,或者創建
  • 遊戲小組作爲常規表格而不是顯示對象。

有一兩件事你可以做的是設置playGroup = nilremoveSelf後,這樣,如果電暈遇到那個if塊再次,它不會再次嘗試將其刪除:

if playGroup ~= nil then 
    playGroup:removeSelf() 
    -- now playGroup is plain table 
    -- dont' want to run this block of code again: 
    playGroup = nil 
end 

如果不解決這個問題,可能仍然值得確定爲什麼在playGroup已從顯示中刪除後調用if塊。打印語句,不設置playGroup爲零,將這樣的伎倆:

if playGroup ~= nil then 
    print('WARNING: Going to remove play group from display') 
    playGroup:removeSelf() 
    print('WARNING: Play group removed from display') 
end 

一旦你知道的原因,你可以加回playGroup = nil

0

你應該破壞v而不是k:

for k,v in pairs(playGroup) do 
    if v ~= nil then 
    v:removeSelf() 
    end 
end 
+0

它給出了一個錯誤:'嘗試索引本地'v'(一個userdata值)' – Orlo

0

確保您已將該對象插入到表或組中。如果您不在表或組中插入對象並嘗試刪除它,則會產生此錯誤。

相關問題