Как порождать несколько объектов каждые 10 секунд
Как сделать этот 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>
С уважением, Кевин
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
Измените свой таймер на выполнение каждые 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 должно быть значение, но я думаю, что оно есть в другом месте.