Corona SDK检测对象移除

有没有办法检测到正在被移除的显示对象?类似于:

obj:addEventListeren("before_remove", function(ev)
    -- ev.target 将会很快被移除
end);
点赞
用户1979583
用户1979583

你想在删除对象之前检查其是否存在吗?那么你可以使用 nil 检查该对象的任何主要属性。如下所示:

local rect = display.newRect(50,50,100,50)  -- 创建一个对象

local function myFunction(e)
  if(rect.x~=nil)then  -- 检查对象是否存在
    print("对象存在。所以,移除它...")
    rect:removeSelf()
  end
end
Runtime:addEventListener("tap",myFunction).

继续编码。。。。。。:)

2014-08-14 11:13:15
用户1376249
用户1376249

我已经完成了,但是实现依赖于 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,我在矩形消失之前被调用了!");
end);
group:removeSelf();
2014-08-14 23:25:53