0

ここに私はいくつかのコードを持っています:

function CountDown()
             if(time_remaining > 1)then
                 time_remaining = time_remaining - 1;
                 print ("Loading menu")  
                  local function main( event )

                    -- LAUNCH A ROCKET 
                    if math.ceil(math.random() * 200) == 10 and launch == false then
                        Particles.GetEmitter  ("Launcher1").rotation = -35
                        Particles.GetEmitter  ("Launcher2").rotation = 20
                        Particles.StartEmitter("Launcher1", true)
                        Particles.StartEmitter("Launcher2", true)

                    end

                    -- UPDATE PARTICLES
                    Particles.Update()

                end

                -- timer.performWithDelay( 33, main, 1 )
                Runtime:addEventListener( "enterFrame", main )
             else
                 time_remaining = 0
                 print ("Load Go!")
                 menuLoad = transition.to( menuLoad, { time=575, y=-500 })
             end

        end

        count_timer = timer.performWithDelay(1000, CountDown, time_total);

シーンを切り替えると、Particles.CleanUp()ですべてのエミッターをキャンセルしますが、math.randomをキャンセルできません。とにかくエミッターを起動しようとしますが、既にnils(Particles.CleanUp)であるため、エラー

Runtime error
    ...me development/Skipjack Rollout Design2/mainmenu.lua:560: attempt to index a nil value
stack traceback:
    [C]: ?
    ...me development/Skipjack Rollout Design2/mainmenu.lua:560: in function <...me development/Skipjack Rollout Design2/mainmenu.lua:556>
    ?: in function <?:226>

お願い助けて!math.randomをキャンセルするにはどうすればよいですか?前もって感謝します!

4

1 に答える 1

0

ここで何を尋ねているのか完全にはわかりませんが、いくつかの問題があるようです。

  1. フレーム リスナーとして追加したメイン関数へのハンドルを失った
  2. time_remaining > 1 を検出するたびに繰り返し追加しています。つまり、フレームごとに複数回実行されています。
  3. menuLoad への参照をタイマー ハンドルに置き換えています (ただし、これは意図的なものかもしれません。

コードから、パーティクルを time_total 秒間再生させたいと推測していますが、その時点で menuLoad に移行しますか? もしそうなら、次のことはどうでしょうか。

local function main(event)
    -- LAUNCH A ROCKET
    if math.ceil(math.random() * 200) == 10 and launch == false then
        Particles.GetEmitter  ("Launcher1").rotation = -35
        Particles.GetEmitter  ("Launcher2").rotation = 20
        Particles.StartEmitter("Launcher1", true)
        Particles.StartEmitter("Launcher2", true)
    end

    -- UPDATE PARTICLES
    Particles.Update()
end

Runtime:addEventListener("enterFrame", main)
timer.performWithDelay(time_total * 1000, function() 
    Runtime:removeEventListener("enterFrame", main)
    transition.to( menuLoad, { time=575, y=-500 })
end)
于 2012-08-09T19:34:41.470 に答える