【发布时间】:2017-07-05 21:29:38
【问题描述】:
我有两个功能:
local function first()
transition.to(ball, {x=100, y=200, time = 200}
end
local function stop()
if(score == 0)then
--stop the first function
end
end
如何在另一个函数中停止第一个函数?
【问题讨论】:
我有两个功能:
local function first()
transition.to(ball, {x=100, y=200, time = 200}
end
local function stop()
if(score == 0)then
--stop the first function
end
end
如何在另一个函数中停止第一个函数?
【问题讨论】:
转换函数返回对转换的引用,您可以稍后将其传递给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
更多详情here
编辑-
要在您实现的函数中手动处理此问题,您需要具有任何支持某种类型的取消检查某些标志或状态的函数,以确定是否继续操作。这就是多线程应用程序现在支持取消的方式,您预先创建一个取消令牌并将其传递给任何进行长时间/密集工作的东西,并且该代码偶尔会检查标志并在发生取消时停止。由于纯 lua 不支持多线程,这里是一个基本的和人为的例子:
local token = { cancelled = false }
local function bar(cancellationToken)
print("Hi, from bar!")
-- simulate user cancellation
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)
【讨论】: