0

如何让这个 spawn 'math.random(1,3)' smile.png 每 10 秒,并在左屏后删除 smile.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

--Spawning multiple objects in randoms locations
local function spawnsmile()

        local smile = display.newImageRect("smile.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});

                --Adding touch event
                smile:addEventListener("touch", smile);
end
 tmr = timer.performWithDelay(0, spawnsmile, total_smiles);
<code>

问候凯文

4

2 回答 2

2

您的代码缺少 total_smiles 值分配延迟参数。

工作代码:

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

--Spawning multiple objects in randoms locations
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});

    --Adding touch event
    smile:addEventListener("touch", smile);
end

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

此外,您应该存储对创建的微笑的引用,以便正确销毁它们并且不泄漏内存。有关内存管理的更多信息

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

和处置:

for i=#smiles,1,-1 do
   smiles[i]:removeSelf()
   smiles[i] = nil
end
于 2013-02-21T15:13:15.217 回答
0

将您的计时器更改为每 10.000 毫秒执行一次而不是 0。您的侦听器函数并没有真正满足任何目的,删除它并将您的 transition.to 更改为 spawnsmile 函数内部

    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-12T07:06:03.283 回答