出于某种原因,我无法移除群组对象,即使我检查它是否为零
我尝试过的第一件事:
if playGroup~=nil then
playGroup:removeSelf()
end
错误:尝试删除已从中删除的对象 阶段或其父/祖先组已被删除。
我也试过这个:
for k,v in pairs(playGroup) do
if k ~= nil then
k:removeSelf()
end
end
错误:尝试调用方法' removeSelf' (零值)
答案 0 :(得分:0)
你应该销毁v而不是k:
for k,v in pairs(playGroup) do
if v ~= nil then
v:removeSelf()
end
end
答案 1 :(得分:0)
您无需从组中删除对象,Corona会在您删除组时为您执行此操作。因此,循环(即使在hades2510提出的修复之后)也不是必需的。
您收到的错误,"尝试删除已被删除的对象..."表明playGroup
是常规表而不是显示对象。在显示对象上调用removeSelf
会删除与Corona相关的条目,将对象保留为常规表。所以至少有这些可能性:
playGroup
作为另一个事件处理程序的一部分删除,或您可以做的一件事是在playGroup = nil
之后设置removeSelf
,这样如果Corona再次遇到if
阻止,它就不会再次尝试删除它:
if playGroup ~= nil then
playGroup:removeSelf()
-- now playGroup is plain table
-- dont' want to run this block of code again:
playGroup = nil
end
如果这确实解决了问题,那么在if
从显示中删除后,可能仍然值得确定调用playGroup
块的原因。没有将playGroup
设置为nil的打印语句可以解决问题:
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
。
答案 2 :(得分:0)
确保已在表或组中插入对象。如果您没有在表或组中插入对象并尝试将其删除,则会产生此错误。