Как запустить функцию зацикливания одним касанием и остановить ее следующим нажатием на ту же кнопку в Corona? - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу создать кнопку, которая запускает зацикленную функцию (скажем, корабль, который непрерывно запускает лазеры) одним касанием, а затем останавливается другим нажатием на кнопку.Я довольно новичок в Lua, так что извините, если это трибальное или что-то в этом роде.

Я перепробовал все, и я знаю, что должен использовать прикосновение для такого рода вещей, но я просто хочу, чтобывключить и выключить петлю.Я когда-то достиг этого с помощью кода, который я нашел здесь https://forums.coronalabs.com/topic/2018-touch-tap-event-endless-loop-bug/, но память исчерпывается, потому что он продолжает посылать предупреждения каждую миллисекунду о том, что таймер уже приостановлен или возобновлен:

ПРЕДУПРЕЖДЕНИЕ: таймер.возобновление (timerId) игнорируется, потому что timerId не был приостановлен

ПРЕДУПРЕЖДЕНИЕ: timer.pause (timerId) игнорируется, потому что timerId уже приостановлен.

--button

local fire = display.newRect( 0, 0, display.contentWidth,    display.contentHeight )
fire:setFillColor( 128, 64, 64 )

--state off

function stateoff()

    timer.pause( timer1 )
    fire:removeEventListener( "tap", stateoff )
    fire:addEventListener( "tap", stateon )
    return true
end

--state on

function stateon()

    function()
    print("fire somthing")
    timer.resume( timer1 )
    fire:removeEventListener( "tap", stateon )
    fire:addEventListener( "tap", stateoff )

end

--loop
timer1 = timer.performWithDelay(1000,stateon,0)

-- start
fire:addEventListener( "tap", stateon )

Я просто хочу кнопку включения / выключения, которая вызываетзацикленная функция или способ удаления сообщений,

1 Ответ

0 голосов
/ 22 декабря 2018

Я бы сделал что-то более похожее на:

local fireTimer = nil

local function fireLaser()
     -- your code to create the laser beam and
     -- set it in motion.
end

local function toggleLaserFire( event )
    if fireTimer then
        timer.cancel( fireTimer )
        fireTimer = nil
    else
        fireTimer = timer.performWithDelay( 1000, fireLaser, 0 )
        fireLaser() -- you probably don't want to wait a second before it fires
                    -- so go ahead and fire one off.
    end
 end

 fire:addEventListener( "tap", toggleLaserFire )

Я не пробовал этот код, поэтому возможны опечатки.

...