Corona SDK检测对象删除

时间:2014-08-13 23:22:41

标签: lua corona

有没有办法检测显示的对象是否被删除?类似的东西:

obj:addEventListeren("before_remove", function(ev)
    -- ev.target will be removed soon
end);

2 个答案:

答案 0 :(得分:1)

在删除对象之前,是否要检查对象是否存在?然后,您可以使用nil检查该对象的任何主要属性。如下所示:

local rect = display.newRect(50,50,100,50)  -- Creating an object

local function myFunction(e)
  if(rect.x~=nil)then  -- checking for its presence    
    print("Object exists. So, remove it...")         
    rect:removeSelf()
  end
end
Runtime:addEventListener("tap",myFunction).

保持编码..............:)

答案 1 :(得分:1)

我已经完成了,但是在Corona SDK内部实现上实现中继,并且可以在不事先通知的情况下停止工作。看起来像这样:

function AddDestructor(obj, func)
    obj._isWidget = true;
    if (not obj.originalRemove) then
        obj.originalRemove = obj.removeSelf or (function() end);
        obj.removeSelf = function(self)

            for i = 1, #self.D do
                self.D[i](self);
            end
            self:originalRemove();
        end

        obj.D = {};
    end

    table.insert(obj.D, func);

end

你可以像这样使用这个代码

local group = displsy.newGroup();
local r = display.newRect(group, 0, 0, 300, 300);
AddDestructor(r, function()
    print("Tadaaaa I was called before rect died!");
end);
group:removeSelf();