如何在 Corona SDK 中的另一个函数中停止函数

我有两个函数:

local function first()
    transition.to(ball, {x=100, y=200, time=200}
end

local function stop()
if(score == 0)then

  --停止第一个函数

end
end

如何在另一个函数中停止第一个函数?

点赞
用户1208078
用户1208078

转换函数会返回对转换的引用,您随后可以将其传递给 transition.cancel 以取消转换。

local currentTransition = nil
local function first()
    currentTransition = transition.to(ball, {x=100, y=200, time = 200}
end

local function stop()
    if (score == 0 and currentTransition ~= nil) then
        transition.cancel(currentTransition)
    end
end

更多细节请参见这里

编辑 -

要在实现的函数中手动处理这个问题,您需要让任何支持某种取消的函数检查某个标志或状态,以确定是否继续操作。这就是多线程应用程序现在支持取消的方式,您预先创建一个取消标记并将其传递给所有执行长时间/密集工作的代码,该代码定期检查标志并在取消发生时停止。由于纯 lua 不支持多线程,这里是一个基本且虚构的例子:

local token = { cancelled = false }

local function bar(cancellationToken)
    print("Hi, from bar!")
    -- 模拟用户取消
    cancellationToken.cancelled = true
end

local function foo(cancellationToken)
    for i=0, 10 do
        if (cancellationToken.cancelled) then
            print("Cancelling operation...")
            return
        end
        print(i)
        bar(cancellationToken)
    end
end

foo(token)
2017-07-03 16:40:48