如何每隔10秒生成多个对象

如何让每隔10秒生成一个math.random(1,3)笑脸.png,并在离开屏幕后删除笑脸.png

<code>
local physics = require("physics")
physics.start()

local function listener(me)
 transition.to(me, {time = math.random(1000,4000), x = math.random(10,310), y = -30, onComplete = function()listener(me) end})
end

--在随机位置生成多个对象
local function spawnsmile()
    local smile = display.newImageRect("smile.png", 45, 45)
    smile:setReferencePoint(display.CenterReferencePoint)
    smile.x = math.random(-10, 400)
    smile.y = -40

    --在屏幕外的位置删除对象
    local function removeSmile()
        display.remove(smile)
        smile = nil
    end

    transition.to(smile, {time = math.random(2000, 8000), x = math.random(-10, 400), y = 600, onComplete = removeSmile})
    physics.addBody(smile, "dynamic", {density = 0.1, bounce = 0.1, friction = .1, radius = 0})

    --添加触摸事件
    smile:addEventListener("touch", smile)
end

--每隔10秒生成一个对象
tmr = timer.performWithDelay(10000, spawnsmile, math.random(1,3))
<code>
点赞
用户1892072
用户1892072

将你的计时器更改为每10,000毫秒一次,而不是0。你的监听器函数没有实际用途,请将其移除并将 spawnsmile 函数中的 transition.to 更改为以下内容:

    transition.to( smile, {time = math.random(2000, 8000), x = math.random(-10, 400) , y = 600, onComplete = function(obj) obj:removeSelf() obj = nil end});

这样应该就能达到你想要的效果了 =)此外,total_smiles 需要有一个值,但我猜你在别处设置了它。

2013-02-12 07:06:03
用户1356130
用户1356130

你的代码缺少 total_smiles 变量的赋值delay 参数。

工作代码:

local physics = require ("physics");
physics.start();

local function listener(me)
    transition.to (me, {time = math.random(1000,4000), x = math.random(10,310), y = -30, onComplete = function()listener(me)end});
end

--在随机位置生成多个对象
local function spawnsmile()
    local smile = display.newImageRect("Button.png", 45, 45);
    smile:setReferencePoint(display.CenterReferencePoint);
    smile.x = math.random(-10, 400);
    smile.y = -40;
    transition.to( smile, {time = math.random(2000, 8000), x = math.random(-10, 400) , y = 600,});
    physics.addBody(smile, "dynamic", {density = 0.1, bounce = 0.1, friction = .1, radius = 0});

    --添加触摸事件
    smile:addEventListener("touch", smile);
end

local total_smiles = 15
tmr = timer.performWithDelay(10000, spawnsmile, total_smiles);

此外,你应该存储创建的 smiles 的引用,以便正确地销毁它们并避免内存泄漏。有关内存管理的更多信息

local smiles = {}
table.insert(smiles, smile)

销毁:

for i=#smiles,1,-1 do
   smiles[i]:removeSelf()
   smiles[i] = nil
end
2013-02-21 15:13:15