0

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.).

因此,在gEmpty1gEmpty2gEmpty3上使用transition.to时,期望一些奇怪的行为是合法的。正如预期的那样, transition.to的前两个块,总共六个调用,行为相同,除了默认的缓动,前三个调用的easing.linear和其他三个调用的easing.outExpo来电。

如果你在编写transition.to调用时犯了一个错误,并且你编写了类似于最后三个transition.to调用的内容,其中在缓动函数的规范中缺少transition =部分,令人惊讶的是只有一个针对非空组,gNonEmpty3负责导致无法理解的错误消息。

问题

  1. 当您收到没有行号和文件名但只有问号的错误时,您应该在 Corona SDK 中做什么?
  2. 为什么 Corona SDK 无法在两个行号 172 和 218 之外提供有意义的报告?
  3. 为什么会发生此错误?我的理论是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
4

1 回答 1

0

而不是你的线:

transition.to(gNonEmpty3, { time = 1000, x = 100, easing.outExpo })

利用 :

transition.to(gNonEmpty3, { time = 1000, x = 100, transition =  easing.outExpo })

wrong syntax在电晕中,当您有一些或时会出现此类错误消息wrong logic。因此,首先检查这些问题。print在行之间插入(您使用的)是查找此类错误行的最佳解决方案。

继续编码...... :)

于 2013-09-26T11:54:23.020 回答