【发布时间】:2014-03-10 00:58:30
【问题描述】:
我正在尝试取消 Widget Candy 按钮的 onPress 事件处理程序中的计时器。但是,即使我已将 timerId 定义为文件范围内的局部变量,timerId 也始终为零。我是 Lua 开发的新手,所以我假设这个问题与变量范围有关,但我很难找到一种方法来访问计时器变量而不使其成为真正的全局变量(即在没有“local”关键字的情况下声明它)。见下面的代码sn-p。
local countdownTimer = timer.performWithDelay(1000, handleCountdownTimer, countdown);
local answerButton1 = wcandy.NewButton
{
x = "center",
y = "55%",
width = "75%",
name = "MyButton1",
theme = "theme_1",
border = {"normal",6,1, .12,.12,0,.4, .72,.72,.72,.6},
pressColor = {1,1,1,.25},
caption = "Touch me!",
textAlign = "center",
fontSize = "40",
onPress = function( EventData )
timer.cancel(countdownTimer); -- "countdownTimer" is always nil!!!
local button = wcandy.GetHandle("MyButton1");
if button:get("caption") == tostring(solution) then
questionText:set("caption", "Correct!");
else
questionText:set("caption", "Wrong!");
end
end
}
【问题讨论】:
-
我刚想到的一件事:是什么让你说“countdownTimer 总是为零!!!”在取消行,如果是错误消息,您可以打印它,还是在 timer.cancel 之前有打印语句?
-
@Scholli - 我正在使用 Lua Glider IDE,我可以使用调试器检查变量。该变量显示为 nil,并且当我尝试执行它时还报告以下错误:?:0:尝试索引 nil 值消息堆栈回溯:?:在函数 [C]:? ?: 在函数 'cancel' ...nk(builds)\sampleblank(default)\sampleblank\main.lua:40: 在函数 'onPress' ...eblank(default)\sampleblank\scripts\widget_candy.lua:913 : 在函数 <...eblank> 中 ?: 在函数
标签: timer event-handling lua coronasdk