使用Corona Sdk将函数创建的项目放入表中

我无法想出如何将简单函数创建的对象放入表格中,使它们作为独立的实体显示。

例如:

local function spawncibo()
nuovoCibo = display.newImage("immagini/cibo/cibo001.png")
end
timer.performWithDelay(1500, spawncibo, -1)

我尝试用 for 循环来做,但不起作用(如果我尝试打印表格,我总是得到空值结果)。

如果您有任何建议,将不胜感激!

点赞
用户1008957
用户1008957

如果我正确理解了您的问题,您可以尝试以下代码:

local cibo = {}
local function spawncibo()
  cibo[#cibo+1] = display.newImage(string.format(
    "immagini/cibo/cibo%3d.png", #cibo+1))
end
timer.performWithDelay(1500, spawncibo, -1)

这将每隔1.5秒读取文件cibo001.pngcibo002.png,...,并将所有图像放入cibo数组中。

2012-09-11 20:40:45
用户269870
用户269870
local spawnedCibos = {}
-- 定义 spawncibo 函数
local function spawncibo()
    nuovoCibo = display.newImage("immagini/cibo/cibo001.png")
    table.insert(spawnedCibos, nuovoCibo);
end
-- 每隔 1.5 秒调用 spawncibo 函数
timer.performWithDelay(1500, spawncibo, -1);

-- 定义 enterFrameListener 函数,用于监听帧
local function enterFrameListener( event )
    for index=#spawnedCibos, 1, -1 do
        local cibo = spawnedCibos[index];
        cibo.x = cibo.x + 1;
        -- 如果 cibo 超出屏幕则移除
        if cibo.x > display.contentWidth then
            cibo:removeSelf();
            table.remove(spawnedCibos, index);
        end
    end
end
2012-09-14 17:18:35
用户1543908
用户1543908

你可以尝试这样做...

local spawned = {} -- 本地表格用于保存所有生成的图像
local timerHandle = nil -- Timer的本地句柄。稍后如果需要, 可以用它取消

local function spawnCibo()
    local nuovoCibo = display.newImage('immagini/cibo/cibo001.png')
    table.insert(spawned, nuovoCibo) -- 把新的DisplayObject (neovoCibo) 插入到生成的表格的末尾。
end

local function frameListener()
    for k, v in pairs(spawned) do -- 遍历表格中的所有键-值对
        if (conditions) then -- 您可能需要将条件更改为一些方法来确定是否要删除该cibo。
            display.remove(spawned[k]) -- 删除将呈现的对象的一部分
            spawned[k] = nil -- 从表中删除对象的引用, 使其可以被垃圾回收释放。
        end
    end
end

timer.performWithDelay(1500, spawnCibo, 0) -- 每1.5秒调用 spawnCibo(),默认为永远执行(这就是0的作用)或者在 timerHandle 上调用 timer.cancel。
Runtime:addEventListener('enterFrame', frameListener) --

如果您有其他问题,请随时询问。

2013-08-17 22:18:07