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

タイマーを0ではなく10.000ミリ秒ごとに実行するように変更します。リスナー関数は実際には何の目的も果たしません。それを削除し、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 に答える