如何在Corona中使用单击启动循环函数,并使用同一按钮的下一个单击停止它?

我想创建一个按钮,用单击启动一个循环函数(比如一个不断发射激光的船),然后再次单击该按钮停止。我对Lua还比较新,所以如果这很平凡或者什么的,请见谅。

我已经尝试了一切,我知道我应该使用touch来实现这种事情,但我只想将循环打开和关闭。我在这里的代码https://forums.coronalabs.com/topic/2018-touch-tap-event-endless-loop-bug/中有些成就,但由于它不停地发送警告,每毫秒定时器已经暂停或恢复,所以内存用尽了:

警告:timer.resume(timerId)被忽略,因为timerId没有暂停

警告:timer.pause(timerId)被忽略,因为timerId已经暂停。

--按钮

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

--关闭的状态

function stateoff()

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

--打开的状态

function stateon()

    function()
    print("发射一些东西")
    timer.resume( timer1 )
    fire:removeEventListener( "tap", stateon )
    fire:addEventListener( "tap", stateoff )

end

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

-- 启动
fire:addEventListener( "tap", stateon )

我只想要一个开关按钮来调用循环函数,或者一种丢弃消息的方法。

点赞
用户1870706
用户1870706

我会这样做:

local fireTimer = nil

local function fireLaser()
     -- 你的代码创建激光束并让其运动。
end

local function toggleLaserFire( event )
    if fireTimer then
        timer.cancel( fireTimer )
        fireTimer = nil
    else
        fireTimer = timer.performWithDelay( 1000, fireLaser, 0 )
        fireLaser() -- 你可能不想等一秒钟才发射,
                    -- 所以直接发射一次。
    end
 end

 fire:addEventListener( "tap", toggleLaserFire )

我没有测试这段代码,所以可能有拼写错误。

2018-12-21 22:30:05