Как да създавате множество обекти на всеки 10 секунди

Как да направите този хайвер '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>

Поздрави Кевин


person kevin ver    schedule 11.02.2013    source източник


Отговори (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
person atok    schedule 21.02.2013

променете таймера си, за да изпълнява на всеки 10 000 ms вместо 0. И вашата функция слушател всъщност не изпълнява никаква цел, премахнете това и променете своя переход. към вътре във функцията 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, но предполагам, че я имате другаде.

person malmatalla    schedule 12.02.2013
comment
добре, така че промених кода, но все пак той хвърля само един smile.png - person kevin ver; 12.02.2013
comment
Е, имате ли някаква стойност в total_smiles? последният параметър на таймера (tmr) е колко пъти трябва да се изпълни. Опитайте да присвоите стойност 5 на total_smiles и вижте какво ще се случи =) - person malmatalla; 12.02.2013