Corona SDK 模拟器,版本 2013.1137 (2013.6.7) 显示以下错误:
Corona Simulator Runtime error
File: ?
Attempt to perform arithmetic on field '?' (a function value)
stack traceback:
[C]: ?
?: in function <?:172>
?: in function <?:218>
该错误是由以下代码(main.lua)引起的:
local d1 = display.newCircle(0, 40, 10)
local gNonEmpty1 = display.newGroup()
gNonEmpty1:insert(display.newCircle(0, 70, 10))
local gEmpty1 = display.newGroup()
transition.to(d1, { time = 1000, x = 100 })
transition.to(gNonEmpty1, { time = 1000, x = 100 })
transition.to(gEmpty1, { time = 1000, x = 100 })
local d2 = display.newCircle(0, 150, 10)
local gNonEmpty2 = display.newGroup()
gNonEmpty2:insert(display.newCircle(0, 180, 10))
local gEmpty2 = display.newGroup()
transition.to(d2, { time = 1000, x = 100, transition = easing.outExpo })
transition.to(gNonEmpty2, { time = 1000, x = 100, transition = easing.outExpo })
transition.to(gEmpty2, { time = 1000, x = 100, transition = easing.outExpo })
local d3 = display.newCircle(0, 260, 10)
local gNonEmpty3 = display.newGroup()
gNonEmpty3:insert(display.newCircle(0, 290, 10))
local gEmpty3 = display.newGroup()
transition.to(d3, { time = 1000, x = 100, easing.outExpo })
transition.to(gNonEmpty3, { time = 1000, x = 100, easing.outExpo })
transition.to(gEmpty3, { time = 1000, x = 100, easing.outExpo })
导致错误的实际行是倒数第二行:
transition.to(gNonEmpty3, { time = 1000, x = 100, easing.outExpo })
您可以通过评论来查看它。
电晕文件指出:
You should have at least one DisplayObject inserted into a
Display Group before you change or read any of the properties
of the group (e.g., x, y, setReferencePoint(), etc.).
因此,在gEmpty1、gEmpty2或gEmpty3上使用transition.to时,期望一些奇怪的行为是合法的。正如预期的那样, transition.to的前两个块,总共六个调用,行为相同,除了默认的缓动,前三个调用的easing.linear和其他三个调用的easing.outExpo来电。
如果你在编写transition.to调用时犯了一个错误,并且你编写了类似于最后三个transition.to调用的内容,其中在缓动函数的规范中缺少transition =部分,令人惊讶的是只有一个针对非空组,gNonEmpty3负责导致无法理解的错误消息。
问题
- 当您收到没有行号和文件名但只有问号的错误时,您应该在 Corona SDK 中做什么?
- 为什么 Corona SDK 无法在两个行号 172 和 218 之外提供有意义的报告?
- 为什么会发生此错误?我的理论是transition.to不会执行太多错误检查;如果您以空组为目标,则指定缓动函数的错误将被忽视;可能这与不应使用空组属性的事实有关,因此可能transition.to 或其内部更新回调发现该组为空并简单地返回而不做任何事情。相反,对于非空组,缺少的转换 =导致某些代码被触发,而不一定是缓动代码,并且在该代码中发生了实际错误。
配置文件
application = {
content = {
width = 320,
height = 480,
scale = "letterBox",
fps = 30
}
}
原始帖子(已过时)
我很难追踪 Corona SDK 中的错误。该错误导致模拟器显示以下消息:
Corona Simulator Runtime error
File: ?
Attempt to perform arithmetic on field '?' (a function value)
stack traceback:
[C]: ?
?: in function <?:172>
?: in function <?:218>
我该如何解释这样的信息?顺便说一句,我没有那么多行的源文件。
我有一个名为 Button.lua 的文件,第 41 行似乎涉及引发异常,尽管它不是从该行引发的。该行是:
button:insert(b1)
我将那条线包裹在两个打印件之间:
print("Before", button, b1)
button:insert(b1)
print("After")
在模拟器控制台中打印以下消息:
Corona Simulator[9801:f03] Before table: 0x11daf4aa0 table: 0x1152363a0
Corona Simulator[9801:f03] After