2012-12-12 108 views
0

非常快速,也许很容易的问题......但它留下了我最后30分钟难倒......但是我怎样才能从画布/屏幕上移除物品?移除物品lua/Corona

我知道这工作与removeSelf(),但我不太清楚如何使用,在我的例子:

display.setStatusBar(display.HiddenStatusBar) 

function cat1() 
    displayCategory(1) 

    print("clicked 1") 
end 

function cat2() 
    displayCategory(2) 

    print("clicked 2") 
end 

function cat3() 
    displayCategory(3) 

    print("clicked 3") 
end 

--category display 
function displayCategory(cat) 

    if (cat == nil) then 
     cat = 1 
    end 

    print(cat) 

    if (cat == 1) then 
     local item1 = display.newRect(100,100,100,100) 
     item1:setFillColor(255,255,0) 
    elseif (cat == 2) then 
     local item2 = display.newRect(200,100,100,100) 
     item2:setFillColor(255,0,255) 
    elseif (cat == 3) then 
     local item3 = display.newRect(300,100,100,100) 
     item3:setFillColor(0,255,255) 
    end 

end 

--category buttons 
local catBtn1 = display.newRect(0,0,50,50) 
catBtn1:setFillColor(255,0,0) 
catBtn1:addEventListener("tap", cat1) 

local catBtn2 = display.newRect(60,0,50,50) 
catBtn2:setFillColor(0,255,0) 
catBtn2:addEventListener("tap", cat2) 

local catBtn3 = display.newRect(120,0,50,50) 
catBtn3:setFillColor(0,0,255) 
catBtn3:addEventListener("tap", cat3) 

现在,我点击我的按钮的每一次,相应的项目弹出,但当我点击任何其他按钮时不会消失。我会怎么做呢?

回答

1

首先,在displayCategory函数之前开始创建那些itens。 然后你将它们设置为不可见的,就像这样:

local item1 = display.newRect(100,100,100,100) 
item1:setFillColor(255,255,0) 
item1.isVisible = false 

后来你设置正确的itens可见或不适当,第2项的情况下,将

item1.isVisible = false 
item2.isVisible = true 
item3.isVisible = false 
+0

Oooooooooh不意识到lua/Corona支持isVisible参数...非常整洁!这将如何影响内存,但是当它们被设置为不可见时,这些图片(以后的图片将被图像替换)仍然会被加载? – Cleverbird

+0

是的,但是除非你真的需要记忆回来,否则装载和卸载东西(尤其是垃圾收集器的存在)是个坏主意。 – speeder

+0

我认为这不会是一个大问题,但良好的内存管理将会很不错...尤其是考虑到移动设备有点低。我会问你是什么意思的垃圾收集器,但我不想脱轨这个线程太多。感谢您的解决方案! – Cleverbird